2017-10-24 2 views
0

Ich habe ein mehrdimensionales Array und ich möchte durchlaufen jedes Element auf jeder Ebene und entfernen Sie alle Elemente, wo 'Kinder' und 'Attribut_ID' beide leer sind (in diesem Fall die letzten 2 Elemente mit einem Schlüssel von 56 und 70).Schleife durch multidimensionale Array und Unset übereinstimmende Elemente

Array 
(
    [11] => Array 
     (
      [page_id] => 11 
      [page_parent_id] => 0 
      [attribute_id] => 8 
      [children] => Array 
       (
       ) 

     ) 

    [12] => Array 
     (
      [page_id] => 12 
      [page_parent_id] => 0 
      [attribute_id] => 
      [children] => Array 
       (
        [49] => Array 
         (
          [page_id] => 49 
          [page_parent_id] => 12 
          [attribute_id] => 
          [children] => Array 
           (
            [50] => Array 
             (
              [page_id] => 50 
              [page_parent_id] => 49 
              [attribute_id] => 32 
              [children] => Array 
               (
               ) 

             ) 

           ) 

         ) 

       ) 

     ) 

    [13] => Array 
     (
      [page_id] => 13 
      [page_parent_id] => 0 
      [attribute_id] => 9 
      [children] => Array 
       (
       ) 

     ) 

    [46] => Array 
     (
      [page_id] => 46 
      [page_parent_id] => 0 
      [attribute_id] => 
      [children] => Array 
       (
        [52] => Array 
         (
          [page_id] => 52 
          [page_parent_id] => 46 
          [attribute_id] => 34 
          [children] => Array 
           (
           ) 

         ) 

        [53] => Array 
         (
          [page_id] => 53 
          [page_parent_id] => 46 
          [attribute_id] => 
          [children] => Array 
           (
            [54] => Array 
             (
              [page_id] => 54 
              [page_parent_id] => 53 
              [attribute_id] => 35 
              [children] => Array 
               (
               ) 

             ) 
            [70] => Array 
             (
              [page_id] => 70 
              [page_parent_id] => 53 
              [attribute_id] => 
              [children] => Array 
               (
               ) 

             ) 

           ) 

         ) 

        [56] => Array 
         (
          [page_id] => 56 
          [page_parent_id] => 46 
          [attribute_id] => 
          [children] => Array 
           (
           ) 

         ) 

       ) 

     ) 

) 

Ich habe dies so weit gekommen, das ich den Artikel echo kann ich ungesetzt will, aber ich bin nicht sicher, wie es zu bekommen, so kann ich es eigentlich nicht gesetzt.

function loop($a) { 
    if(empty($a['children'])) 
    { 
     if(empty($a['attribute_id'])) 
     { 
      var_dump($a); 
     } 
    } else { 
     foreach($a['children'] as $v) { 
      loop($v); 
     } 
    } 
} 

foreach($pages as $p) 
{ 
    loop($p); 
} 

Antwort

1

Etwas wie folgt aus:

function loop($a) { 
    $newArray = array(); 
    foreach ($a as $k => $v) { 
     if (isset($v['children']) && count($v['children']) > 0) { 
      $v['children'] = loop($v['children']); 
     } 

     if ((isset($v['children']) && count($v['children']) > 0) || !empty($v['attribute_id'])) { 
      $newArray[$k] = $v; 
     } 
    } 
    return $newArray; 
} 
$newArray = loop($a); 
Verwandte Themen