如何在PHP中获取重复的多维数组

3

我有一个多维数组:

   Array
(
    [0] => Array
        (
            [a] => 1
            [b] => 2
            [c] => 3
            [d] => 4
        )

    [1] => Array
        (
            [a] => 1
            [b] => 5
            [c] => 3
            [d] => 4
        )

    [2] => Array
        (
            [a] => 1
            [b] => 2
            [c] => 3
            [d] => 4
        )

)

看一下第一个索引(或零)和第三个索引(数字二索引),a、b、c、d中的值都是1、2、3、4。假设数组相等,或它们没有区别;我的问题是,如何捕获相等的数组,我的目的是向用户显示输入的重复值。

我已经在使用array_unique。这是结果:

    Array
(
    [0] => Array
        (
            [a] => 1
            [b] => 2
            [c] => 3
            [d] => 4
        )

    [1] => Array
        (
            [a] => 1
            [b] => 5
            [c] => 3
            [d] => 4
        )

)

但是我只想获取重复的数据,而不是删除重复的数据。

// first : get all data, if the data same / duplicate take only one data

$unique = array_unique($data, SORT_REGULAR);

// then, get the data which duplicate with

$diffCellUniq = array_diff_key($data, $unique);

// so print the result 

print_r($diffCellUniq); exit;



   Array
(
    [2] => Array
        (
            [a] => 1
            [b] => 2
            [c] => 3
            [d] => 4
        )

)

1
我的目的是向用户展示输入重复值的价值 - 重新表述你的目标。你想要获取唯一的项目还是获取重复项目的索引? - RomanPerekhrest
抱歉我表达不够清晰,我的目标是获取重复项的索引 @RomanPerekhrest - Kode Kite
4个回答

2
// first : get all data, if the data same / duplicate take only one data

$unique = array_unique($data, SORT_REGULAR);

// then, get the data which duplicate with

$diffCellUniq = array_diff_key($data, $unique);

// so print the result

print_r($diffCellUniq); exit;

Array
(
    [2] => Array
        (
            [a] => 1
            [b] => 2
            [c] => 3
            [d] => 4
        )

)

天才!谢谢。>:) - GTS Joe

0

要仅获取保留其键的重复项,请使用以下方法:array_keysarray_fill_keysarray_mergearray_uniquearray_intersect_key函数:

$dup_keys = [];
foreach ($arr as $item) {  // $arr is your initial array
    $keys = array_keys($arr, $item);
    if (count($keys) > 1) {
        $dup_keys = array_merge($dup_keys, $keys);
    }
}

$dup_keys = array_unique($dup_keys);
$dup_items = array_intersect_key($arr, array_fill_keys($dup_keys, 0));

print_r($dup_items);

输出:

Array
(
    [0] => Array
        (
            [a] => 1
            [b] => 2
            [c] => 3
            [d] => 4
        )

    [2] => Array
        (
            [a] => 1
            [b] => 2
            [c] => 3
            [d] => 4
        )
)

演示链接


-1

由于array_unique无法处理多维数组,因此实现这一点的一种方法是对该数组进行序列化,并在其上应用array_unique函数。

应用唯一函数后,我们可以将其反序列化并以数组格式获取它。

参考资料:http://php.net/manual/en/function.array-unique.php#97285

请尝试此操作:

$input = array_unique(array_map("serialize", $input))
$input = array_map("unserialize", $input);

是的,我们确实使用array_unique。由于它不是单维数组,我们需要通过序列化和反序列化来进行这些调整。 - Object Manipulator

-1

你需要使用array_unique函数:

$var = array_unique($YOUR ARRAY, SORT_REGULAR);

编辑:

<?php
$your_array = array (
    0 => array
        (
            'a' => '1',
            'b' => '2',
            'c' => '3',
            'd' => '4',
        ),

    1 => array
        (
            'a' => '1',
            'b' => '5',
            'c' => '3',
            'd' => '4',
        ),

    2 => array
        (
            'a' => '1',
            'b' => '2',
            'c' => '3',
            'd' => '4',
        ),  
);

$tmpArray = array ();

foreach ($your_array as $row) 
    if (!in_array($row, $tmpArray)) array_push($tmpArray, $row);

var_dump($tmpArray);
?>

请查看在线示例https://eval.in/631417


查看我的问题以获取代码结果 @Syed - Kode Kite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接