Php 删除数组特定值相同/唯一的二维数组元素(第一个匹配除外)
例如,下面是一个二维数组Php 删除数组特定值相同/唯一的二维数组元素(第一个匹配除外),php,arrays,unique,Php,Arrays,Unique,例如,下面是一个二维数组 $a = array( "one" => array ( "id" => 111, "name" => "Jhon" ), "two" => array( "id" => 222, "name" => &quo
$a = array(
"one" => array (
"id" => 111,
"name" => "Jhon"
),
"two" => array(
"id" => 222,
"name" => "Adam"
),
"three" => array(
"id" => 111,
"name" => "Mark"
),
"four" => array(
"id" => 125,
"name" => "Jhon"
),
"five" => array(
"id" => 111,
"name" => "Jhon"
),
"six" => array(
"id" => 222,
"name" => "Rock"
),
);
我想删除二维数组值相同/唯一的数组(第一个匹配除外)。
例如,我想删除所有id
键值相同的数组(第一个匹配除外)。
同样,数组id
键值111
(具有数组计数3)和222
(具有数组计数2)。
因此,在删除唯一键id
之后,结果数组应该如下所示:
$a = array(
"one" => array (
"id" => 111,
"name" => "Jhon"
),
"two" => array(
"id" => 222,
"name" => "Adam"
),
"four" => array(
"id" => 125,
"name" => "Jhon"
),
);
使用此代码完成任务
<?php
$a = array(
"one" => array (
"id" => 111,
"name" => "Jhon"
),
"two" => array(
"id" => 222,
"name" => "Adam"
),
"three" => array(
"id" => 111,
"name" => "Mark"
),
"four" => array(
"id" => 125,
"name" => "Jhon"
),
"five" => array(
"id" => 111,
"name" => "Jhon"
),
"six" => array(
"id" => 222,
"name" => "Rock"
),
);
$unique = [];
$final_array = [];
foreach ($a as $value) {
if(in_array($value['id'],$unique)){
continue;
}
else {
$unique[] = $value['id'];
$final_array[] = $value;
}
}
echo "<pre>";
print_r($final_array);
?>
在这里,我使用一个唯一的命名数组,我在数组中放置唯一的键并循环,如果id存在于unique中,那么它将跳过该项,否则我将其添加到最终数组中。
希望这能解决您的问题。您需要保留一个包含添加键的数组。您可以使用删除不必要的行 代码:() 输出:
最终_数组中缺少键(1
、2
和4
)。
$array = [
"one" => ["id" => 111, "name" => "Jhon"],
"two" => ["id" => 222, "name" => "Adam"],
"three" => ["id" => 111, "name" => "Mark"],
"four" => ["id" => 125, "name" => "Jhon"],
"five" => ["id" => 111, "name" => "Jhon"],
"six" => ["id" => 222, "name" => "Rock"],
];
// store added IDs
$added = [];
// filter array (need to pass $added as reference to be updated)
$output = array_filter($array, function($item) use (&$added)
{
// shortcut for readability
$id = $item['id'];
// Check if id already exists
if (isset($added[$id])) { return false; }
// add to reference
$added[$id] = true;
// add to final array
return true;
});
unset($added); // no longer needed.
var_dump($output);
array(3) {
["one"]=>
array(2) {
["id"]=>
int(111)
["name"]=>
string(4) "Jhon"
}
["two"]=>
array(2) {
["id"]=>
int(222)
["name"]=>
string(4) "Adam"
}
["four"]=>
array(2) {
["id"]=>
int(125)
["name"]=>
string(4) "Jhon"
}
}