删除多维数组php中的重复数组

时间:2016-04-28 16:24:43

标签: php arrays

我有一个类别和子类别的多维数组,但是一个子类别(在[childs]中)不能是父类,我需要删除作为子类别的父类别。

Array
(
    [0] => Array
        (
            [id] => 6
            [name] => Homilías
        )

    [1] => Array
        (
            [id] => 11
            [name] => Obituario
        )

    [2] => Array
        (
            [id] => 12
            [name] => ACTUALIDAD
            [childs] => Array
                (
                    [0] => Array
                        (
                            [name] => Homilías
                            [id] => 6
                        )
                    [1] => Array
                       (
                            [id] => 11
                            [name] => Obituario
                       )
                 )
         )
)

1 个答案:

答案 0 :(得分:0)

您可以使用array_walk_recursive,就像这样..

<?php
$array = array(
  0 => array(
      'id' => 6,
      'name' => 'Homilias'
  ),
  1 => array(
      'id' => 11,
      'name' => 'Obituario'
  ),
  2 => array(
      'id' => 12,
      'name' => 'ACTUALIDAD',
      'childs' => array(
          0 => array(
              'name' => 'Homilias',
              'id' => 6
          ),
          1 => array (
              'id' => 11,
              'name' => 'Obituario'
          )
      )
  )
);

$rootCategories = array();
foreach ($array as $key => $value) {
    if(!isset($value['childs']))
        $rootCategories[$key] = $value['name'];
}

array_walk_recursive($array, 'MyClass::removeDuplicatedRoot', array($rootCategories, &$array));

class MyClass
{
    static function removeDuplicatedRoot($myArray, $key, $data)
    {
        $keyToRemove = array_search($myArray, $data[0]);
        if ($key == 'name' && false !== $keyToRemove) {
            unset($data[1][$keyToRemove]);
        }
    }
}

var_dump($array);