簡體   English   中英

如何從多維數組中刪除重復項和原始副本?

[英]How to remove duplicates and the original one from a multidimensional array?

如何刪除多維數組中的重復項? 我嘗試了在stackoverflow上找到的幾個答案,但是它們在多數組中都不適合我。 我找到的最接近答案是:

如何刪除數組中的重復項? 但這僅適用於一維數組。

例如我有這個:

$array = array(
    [0] = array(
        [color] => red,
        [type] => color,
        [name] => color1
    )
    [1] = array(
        [color] => gray,
        [type] => color,
        [name] => color2
    )
    [2] = array(
        [color] => blue,
        [type] => color,
        [name] => color3
    )
    [3] = array(
        [color] => green,
        [type] => color,
        [name] => color4
    )
    [4] = array(
        [color] => black,
        [type] => color,
        [name] => color5
    )
    [3] = array(
        [color] => gray,
        [type] => color,
        [name] => color2
    )
    [4] = array(
        [color] => blue,
        [type] => color,
        [name] => color3
    )
)

我如何讓它變成這個:?

$array = array(
    [0] = array(
        [color] => red,
        [type] => color,
        [name] => color1
    )
    [1] = array(
        [color] => gray,
        [type] => color,
        [name] => color2
    )
    [2] = array(
        [color] => blue,
        [type] => color,
        [name] => color3
    )
    [3] = array(
        [color] => green,
        [type] => color,
        [name] => color4
    )
    [4] = array(
        [color] => black,
        [type] => color,
        [name] => color5
    )
)

好吧,這是一個很差的答案,但是看來您想要的是UNIQUE數據,這是一些解決該問題的非常糟糕的代碼。

$array2 = array();
foreach ($array as $val) 
{
  @$array2[$val['color']]++;
}
foreach ($array as $key=>$val) 
{
  if ($array2[$val['color']] >1)
   unset($array[$key]);
}

@是那里,以防止php引發錯誤。 或者您可以編寫更多代碼來預定義$array2但這確實可行。

您可以先獲取顏色計數,以便區分將要刪除和保留的顏色。

然后,在那之后,您將知道要保留哪種顏色。

要獲取計數,只需使用array_count_values來獲取要保留的計數。 最后,過濾:

$a = array_count_values(array_column($array, 'color'));
$new_array = array_filter($array, function($e) use($a) {
    return $a[$e['color']] === 1; // filter count equal to 1
});

這使用的array_column在您的環境中可能不可用,您可以使用此行作為替代:

$a = array_count_values(array_map(function($e){ return $e['color']; }, $array));

假設你的數組是這個

$array = array(
    '0' => array(
        'color' => 'red',
        'type' => 'color',
        'name' => 'color1'
    ),
    '1' => array(
        'color' => 'gray',
        'type' => 'color',
        'name' => 'color2'
    ),
    '2' => array(
        'color' => 'blue',
        'type' => 'color',
        'name' => 'color3'
    ),
    '3' => array(
        'color' => 'green',
        'type' => 'color',
        'name' => 'color4'
    ),
    '4' => array(
        'color' => 'black',
        'type' => 'color',
        'name' => 'color5'
    ),
    '5' => array(
        'color' => 'gray',
        'type' => 'color',
        'name' => 'color2'
    ),
    '6' => array(
        'color' => 'blue',
        'type' => 'color',
        'name' => 'color3'
    )
);

$input = array_map("unserialize", array_unique(array_map("serialize", $array)));
echo ' <pre>';
print_r($input);

產量

Array
(
    [0] => Array
        (
            [color] => red
            [type] => color
            [name] => color1
        )

    [1] => Array
        (
            [color] => gray
            [type] => color
            [name] => color2
        )

    [2] => Array
        (
            [color] => blue
            [type] => color
            [name] => color3
        )

    [3] => Array
        (
            [color] => green
            [type] => color
            [name] => color4
        )

    [4] => Array
        (
            [color] => black
            [type] => color
            [name] => color5
        )

)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM