我有一个多维数组,如果count
的值相同,我想从索引中删除重复项,并按照下面的说明保持数组排序。否则,请保留副本。
这是示例数组:-
$array = (
[0] => array(
'count' => 3,
'title' => 'Test title 1',
'cost' => 300
),
[1] => array(
'count' => 3,
'title' => 'Test title 2',
'cost' => 200
),
[2] => array(
'count' => 2,
'title' => 'Test title 3',
'cost' => 600
),
[3] => array(
'count' => 2,
'title' => 'Test title 4',
'cost' => 500
),
);
从上面的示例数组中,如果存在相同的计数值,我们应该寻找每个索引。如果是这样,请寻找下一个索引,并检查它是否具有相同的值,然后构建一个新的数组,如下面的示例数组。
$newArray = (
[0] => array(
'count' => 3,
'title' => 'Test title 2',
'cost' => 200
),
[1] => array(
'count' => 2,
'title' => 'Test title 4',
'cost' => 500
)
);
从上面的数组示例中,我们应该检查每个索引是否计数值没有重复。如果是这样,请继续构建具有相同计数值的新数组。
$newArray = (
[0] => array(
'count' => 3,
'title' => 'Test title 1',
'cost' => 300
),
[1] => array(
'count' => 3,
'title' => 'Test title 2',
'cost' => 200
)
);
这是我到目前为止所做的代码,我不确定在这里做什么:-
$newArray = [];
foreach ($array as $value) {
if ($value['count'] == $value['count']) {
$newArray[] = $value;
}
else {
$newArray[] = $value;
}
}
答案 0 :(得分:1)
这应该做到:
$array = [
['count' => 3, 'title' => 'Test title 1', 'cost' => 300],
['count' => 3, 'title' => 'Test title 2', 'cost' => 200],
['count' => 2, 'title' => 'Test title 3', 'cost' => 600],
['count' => 2, 'title' => 'Test title 4', 'cost' => 500]
];
// If you want to use the first occurance
$filtered = array_reduce($array, function($acc, $item) {
if(!in_array($item['count'], array_column($acc, 'count'))) {
$acc[] = $item;
}
return $acc;
}, []);
print_r($filtered);
// Or, if you want to use the use the last occurance
$filtered = array_reduce($array, function($acc, $item) {
$key = array_search($item['count'], array_column($acc, 'count'));
if($key!==false) {
$acc[$key] = $item;
} else {
$acc[] = $item;
}
return $acc;
}, []);
print_r($filtered);