检查数组中的所有数组是否都有特定的键

时间:2017-10-18 16:25:08

标签: php arrays sorting

示例数组:

$items = array(
  array('sort': 1, 'name': 'name'),
  array('sort': 3, 'name': 'name'),
  array('sort': null, 'name': 'name')
);

我需要知道所有子数组是否都有sort键。如果没有,我会通过for循环手动创建排序(并覆盖具有它的sort值)。

我已经在运行for循环,我正在考虑添加另一个密钥,例如manual_sort,我将等于index + 1,并且在循环之后,如果至少有一个数组没有' t有sort密钥或者如果它为null,我会使用manual_sort而不是sort密钥(例如,当通过前端循环元素或任何用法时数据有)。

还考虑做第二个循环,以了解是否应覆盖sort

这些似乎是肮脏的解决方案,任何想法?

我当前的代码类似于:

$db_sorted_items = true;

for ($i=0; $i < count($items); $i++) {
  $items[$i]['name'] = ucfirst($items[$i]['name']);

  if (empty($items[$i]['sort']) {
    $db_sorted_items = false;
  }

  $items[$i]['number'] = $i + 1; // $i+1 because sort number starts at 1.
}

// err, gotta use `$items[$i]['number']` (or `sort` had all arrays had a positive `sort` key)

2 个答案:

答案 0 :(得分:1)

// use array_column to get array for key 'sort'
// then use array_filter to remove null values
// then compare count 

if(count($array) == count(array_filter(array_column($array,'sort')))){
    echo 'All have valid sort key';
}else{
    echo 'No, few are missing';
}

如果您想要进行严格检查,要确保与sort键对应的值是数字,那么您可以使用is_numeric

来使用下面的值
if(count($array)==count(array_filter(array_column($array,'sort'),'is_numeric'))){

}

答案 1 :(得分:0)

您的代码对我来说很好。我会更改它,以便在找到一个没有它的对象时刷新所有sort属性,如下所示:

$db_sorted_items = true;

for ($i=0; $i < count($items); $i++) {
  $items[$i]['name'] = ucfirst($items[$i]['name']);

  if ($db_sorted_items && empty($items[$i]['sort']) {
    $db_sorted_items = false;
    $i = -1; // Re-start for (the for will add 1 at the end)
  }else{
    $items[$i]['sort'] = $i + 1; // $i+1 because sort number starts at 1.
  }
}