[英]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.