list_title可以看到,我想按值删除重复项。我知道有几个问题和答案,但是他们的解决方案对我不起作用。

这是我尝试过的:

$uniqueArray = array_map("unserialize", array_unique(array_map("serialize", $notify)));

结果:
Array
(
[0] => Array
    (
        [list_id] => 86
        [list_reference] => 130948
        [list_title] => Offer:  apartment 2+kk
        [list_city] => Prague
        [list_date] => 2017-03-03 11:20:35
        [list_status] => 0
        [list_creator] => Company A
        [list_price] => 30000
        [list_furniture] => ["1","0","0"]
        [list_accommodation] => flat
    )

[1] => Array
    (
        [list_id] => 87
        [list_reference] => 130947
        [list_title] => Offer:  apartment 2+kk
        [list_date] => 2017-03-03 11:20:35
        [list_status] => 0
        [list_creator] => Company B
        [list_price] => 30000
        [list_furniture] => ["1","0","0"]
        [list_accommodation] => flat
    )

[2] => Array ...

由于标题的原因,预期结果应该是其中之一:
Array
(
[0] => Array
(
    [list_id] => 86
    [list_reference] => 130948
    [list_title] => Offer:  apartment 2+kk
    [list_city] => Prague
    [list_date] => 2017-03-03 11:20:35
    [list_status] => 0
    [list_creator] => Company A
    [list_price] => 30000
    [list_furniture] => ["1","0","0"]
    [list_accommodation] => flat
)

最佳答案

因此,基本上,您想通过'list_title'列删除重复项。假设我们保留了该标题的第一个匹配项。然后,您可以使用几个标准函数来实现此目的:

// Reverse array, so the first occurrence kept.
$data = array_reverse($data);

$result = array_reverse( // Reverse array to the initial order.
    array_values( // Get rid of string keys (make array indexed again).
        array_combine( // Create array taking keys from column and values from the base array.
            array_column($data, 'list_title'),
            $data
        )
    )
);

这是working demo

更新:

基于@mickmackusa注释,可以将代码简化为:
$result = array_reverse(array_values(array_column(
    array_reverse($data),
    null,
    'list_title'
)));

这是在the docs中有关column_key参数规范的内容:

关于PHP按值从多维数组中删除重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42577258/

10-12 05:28