2016-04-28 19 views
-1

カテゴリとサブカテゴリの多次元配列がありますが、サブカテゴリ([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 
         ) 
       ) 
     ) 
) 
+0

をあなたは 'childs'または '2'を削除する意味? –

+0

素早く答えてくれてありがとうFrayne、私は最初の2つのカテゴリを削除する必要があります。 "Actualidad"の子であり、それは親ではありません: –

+0

それらを 'unset' –

答えて

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);