我有一个像这样的数组:
Array
(
[0] => Array
(
[name] => "Size"
[value] => "Large"
[id] => "1201"
)
[1] => Array
(
[name] => "Size"
[value] => "Small"
[id] => "1203"
)
[2] => Array
(
[name] => "Size"
[value] => "Medium"
[id] => "1204"
)
[3] => Array
(
[name] => "Size"
[value] => "Large"
[id] => "1205"
)
[4] => Array
(
[name] => "Size"
[value] => "Large"
[id] => "1206"
)
[5] => Array
(
[name] => "Size"
[value] => "Large"
[id] => "1207"
)
)
以上数组重复了Large
次,我想基于value
标识唯一的键。并从该数组中删除该索引(0,1,2,3,4,5)。
提及的问题包含这样的问题,但不是我面临的确切问题。
我正在尝试这样:
array_map("unserialize", array_unique(array_map("serialize", $input)));
但不起作用。
答案 0 :(得分:1)
由于您尚未回答我的问题,所以我认为“ id”是无关紧要的。
通过使用array_column使数组与“ value”关联,它将删除所有重复项,然后array_values将把键重置为索引。
这样,您根本不需要循环。
$arr = array_values(array_column($arr, NULL, "value"));
var_dump($arr);
输出:
array(3) {
[0]=>
array(3) {
["name"]=>
string(4) "Size"
["value"]=>
string(5) "Large"
["id"]=>
string(4) "1207"
}
[1]=>
array(3) {
["name"]=>
string(4) "Size"
["value"]=>
string(5) "Small"
["id"]=>
string(4) "1203"
}
[2]=>
array(3) {
["name"]=>
string(4) "Size"
["value"]=>
string(6) "Medium"
["id"]=>
string(4) "1204"
}
}
如果您想保持最低的“ id”,并且“ id”在数组中越往下越高(例如您的示例),则可以在代码前使用rsort($arr);
。
rsort($arr);
$arr = array_values(array_column($arr, NULL, "value"));
var_dump($arr);
输出:
array(3) {
[0]=>
array(3) {
["name"]=>
string(4) "Size"
["value"]=>
string(5) "Small"
["id"]=>
string(4) "1203"
}
[1]=>
array(3) {
["name"]=>
string(4) "Size"
["value"]=>
string(6) "Medium"
["id"]=>
string(4) "1204"
}
[2]=>
array(3) {
["name"]=>
string(4) "Size"
["value"]=>
string(5) "Large"
["id"]=>
string(4) "1201"
}
}
答案 1 :(得分:0)
您可以尝试进行foreach创建所需的另一个数组
$arrayOrdenado = array();
foreach($array as $a){
$arrayOrdenado[$a["value"]][] = $a;
}