PHP - 从数组中删除相同的兄弟(叶子)元素(删除相同的数组)。

3
尝试从嵌套数组中删除相同的兄弟节点(叶子)/相同的数组。
例如:
$data = [
        'test' => [
                'a' => [
                        'b' => 'something',
                        5 => [
                                'a' => [
                                        1 => 'test1',
                                        19 => 'test2',
                                        6 => 'test3',
                                ],
                                0 => 'test',
                        ],
                ],
                'b' => 1,
                2 => [
                        3 => 'something',
                        5 => 'somethingelse',
                ],
                4 => 'body'
        ],
        'anothertest' => [
                'b' => 1,
                0 => [
                        'test' => 1,
                        2 => 'something',
                        3 => 'somethingelse',
                ],
                1 => [
                        'test' => 1,
                        2 => 'something',
                        3 => 'somethingelse',
                ],
        ],
];

Array
(
    [test] => Array
        (
            [a] => Array
                (
                    [b] => something
                    [5] => Array
                        (
                            [a] => Array
                                (
                                    [1] => test1
                                    [19] => test2
                                    [6] => test3
                                )

                            [0] => test
                        )

                )

            [b] => 1
            [2] => Array
                (
                    [3] => something
                    [5] => somethingelse
                )

            [4] => body
        )

    [anothertest] => Array
        (
            [b] => 1
            [0] => Array
                (
                    [test] => 1
                    [2] => something
                    [3] => somethingelse
                )

            [1] => Array
                (
                    [test] => 1
                    [2] => something
                    [3] => somethingelse
                )

        )

)
$data['anothertest'][0] 和 $data['anothertest'][1] 是相同的,因此必须删除一个。
具有字符串索引的数组可以跳过。
在foreach键值块中如何比较一个数组和另一个数组。
我知道我可以使用 "===" 运算符比较相同的数组,但不知道如何在 foreach 循环中访问下一个数组。
这是我的代码,附有我不知道如何编写的伪代码块。
function cleansiblings($array)
  {
    foreach ($array as $key => $value) {
                if (!is_string($key)) {
                   //PSEUDO CODE 
                   //compare current $value to $value+1?? 
                }
    }

  }

非常感谢您的帮助。

谢谢,


你尝试过array_unique函数吗?(http://php.net/manual/zh/function.array-unique.php) - janfitz
2个回答

0
您可以像这样从多维数组中删除重复项。
<?php

function get_unique($array){
    $result = array_map("unserialize", array_unique(array_map("serialize", $array)));
    foreach ($result as $key => $value){
        if ( is_array($value) ){
            $result[$key] = get_unique($value);
        }
    }
    return $result;
}

echo "<pre/>";print_r(get_unique($data));

?>

Output:-https://eval.in/817099


@android_dev 很高兴能帮助你 :):) - Alive to die - Anant

0

回答你问题的最后一部分:你可以使用 $key 在 foreach 循环中访问原始的 $array:

function cleansiblings($array)
  {
    foreach ($array as $key => $value) {
            if (!is_string($key)) {
               if (isset($array[$key+1])) {
                  // Compare $array[$key] (or $value, it is the same) with $array[$key+1]
                  // To remove item from array, just unset it: unset($array[$key]). 
                  // Note that you can alter iterated array in PHP, 
                  // but not in some other languages.
               }
            }
    }

}

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