【问题标题】:How can I get the duplicate multidimensional array in php如何在php中获取重复的多维数组
【发布时间】:2017-01-06 10:26:12
【问题描述】:

我有一个多维数组:

   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
        )

)

【问题讨论】:

  • 我的目的是向用户展示重复输入的值 - 解释你的目标。您想只获取唯一项目还是获取重复项目的索引??
  • 我很抱歉解释我的目标,我想获取重复项目的索引@RomanPerekhrest

标签: php arrays multidimensional-array duplicates array-intersect


【解决方案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的结果
【解决方案2】:

由于 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。由于不是一维的,我们需要通过序列化和反序列化来进行这些调整。
【解决方案3】:

要仅获取保留其密钥的重复项 - 使用以下方法与 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
        )
)

DEMO link

【讨论】:

    【解决方案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
            )
    
    )
    

    【讨论】:

    • 天才!谢谢你。 >:)
    猜你喜欢
    • 2018-07-22
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2017-11-16
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多