示例数组:
$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)
答案 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.
}
}