如果具有相同的值,如何从数组中删除索引

时间:2019-04-10 01:00:32

标签: php

我有一个多维数组,如果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;
    }
}

1 个答案:

答案 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);