Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除数组特定值相同/唯一的二维数组元素(第一个匹配除外)_Php_Arrays_Unique - Fatal编程技术网

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"
  }
}