2016-08-19 116 views
-1

我使用jQuery插件,它產生以下的數組:PHP除去無用嵌套數組

array:4 [ 
    0 => array:1 [ 
    "page_id" => "1" 
    ] 
    1 => array:2 [ 
    "page_id" => "2" 
    "children" => array:1 [ 
     0 => array:2 [ 
     0 => array:2 [ 
      "page_id" => "10" 
      "children" => array:1 [ 
      0 => array:2 [ 
       0 => array:1 [ 
       "page_id" => "12" 
       ] 
       1 => array:1 [ 
       "page_id" => "13" 
       ] 
      ] 
      ] 
     ] 
     1 => array:1 [ 
      "page_id" => "11" 
     ] 
     ] 
    ] 
    ] 
    2 => array:1 [ 
    "page_id" => "4" 
    ] 
    3 => array:1 [ 
    "page_id" => "3" 
    ] 
] 

該數組是動態的,從而可以有更多的嵌套陣列。我需要清理一些數組。正如你可以在page_id => 2下看到的,有孩子。它包含一個無用的數組(0 => array:2)。

是否有可能刪除這個無用的數組?我真的需要它來重新產生我的菜單項目的位置......任何想法?

回答

1

您可以使用遞歸算法:

function removeUselessArrays($array) { 
    $newArray = []; 

    foreach ($array as $key => $value) { 
     if (is_array($value)) { 
      if (array_keys($value) === [ 0 ]) { 
       $newArray[$key] = removeUselessArrays($value[0]); 
      } else { 
       $newArray[$key] = removeUselessArrays($value); 
      } 
     } else { 
      $newArray[$key] = $value; 
     } 
    } 

    return $newArray; 
} 

看到代碼工作here

+0

謝謝,但看起來更接近我的陣列。還有一個嵌套級別: 「children」=> array:1 [0 => array:2 [0 => array:2 [ ]您沒有在您的示例中使用它。我試過了,但它並沒有刪除數組:1從兒童 – general666

+0

@ general666我已更新算法 – Phylogenesis

+0

男人你救了我的命!謝謝!!! – general666

0

你可以做的是從一個循環內,像這樣:

ALGORITHM:

<?php 

    foreach($arr as $key=>$val){ 
     foreach($val as $index=>$item){ 
      if(is_array($item)){ 
       $children    = ["page_id"=>$item[0]["page_id"]]; 
       $children    = array_merge($children, $item[0][$index]); 
       $arr[$key][$index]  = $children; 
      } 
     } 
    } 

TEST

<?php 

    // LOOP THROUGH THE ARRAY CONTAINING UNWANTED ELEMENT(S) 
    foreach($arr as $key=>$val){ 
     foreach($val as $index=>$item){ 
      // CHECK IF ONE OF THE SUB-ELEMENTS IS AN ARRAY & HAS KEY: children 
      if(is_array($item)){ 
       // IF SO; GET THE CHILDREN ELEMENT OFF THAT ITEM 
       // AND STORE IT IN A VARIABLE... 
       $children    = $item[0][$index]; 
       // NOW SET THE SUB-ELEMENT TO THE $children 
       $children    = ["page_id"=>$item[0]["page_id"]]; 
       $children    = array_merge($children, $item[0][$index]); 
       $arr[$key][$index]  = $children; 
      } 
     } 
    } 

    // DUMP-OUT THE OUTPUT: 
    var_dump($arr); 

    // PRODUCES::: 
    array (size=4) 
     0 => 
     array (size=1) 
      'page_id' => string '1' (length=1) 
     1 => 
     array (size=2) 
      'page_id' => string '2' (length=1) 
      'children' => 
      array (size=3) 
       'page_id' => string '10' (length=1) 
       0 => 
       array (size=1) 
        'page_id' => string '12' (length=1) 
       1 => 
       array (size=1) 
        'page_id' => string '13' (length=1) 
     2 => 
     array (size=1) 
      'page_id' => string '4' (length=1) 
     3 => 
     array (size=1) 
      'page_id' => string '3' (length=1) 

快速測試發現Here

+0

謝謝,但請看看我的新答案...我想你不理解我。當然,就像我說的我的數組是動態的,所以可以有更多的嵌套級別。你的代碼看起來像只適用於2級 – general666

+0

@ general666代碼更新....你可能會重新測試它(如果你願意) – Poiz

+0

謝謝,但我得到的錯誤: 未定義的指數:兒童 – general666