2017-06-14 33 views
4

我有嵌套多維數組可以是2個或3個級別的內心深處每個列表陣列。在裏面我可能會或可能不會有名單arrray。我需要循環陣列之上:多維數組存儲另一個陣列

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => cat_name_1 
      [list] => Array 
       (
        [1] => swgdgbdg 
        [2] => xcbcxb 
       ) 

     ) 

    [1] => Array 
     (
      [id] => 3 
      [name] => cat_name_3 
      [list] => Array 
       (
        [0] => Array 
         (
          [id] => 1 
          [name] => cat_name_1 
          [list] => Array 
           (
            [1] => 543h54h 
            [2] => 54hrhhfr2 
           ) 

         ) 

        [1] => Array 
         (
          [id] => 2 
          [name] => cat_name_2 
          [list] => Array 
           (
            [1] => eherfherh 
            [2] => 4564642 
           ) 

         ) 

        [2] => Array 
         (
          [1] => erggb45yt 
          [2] => jyuk768k 
         ) 

        [3] => Array 
         (
          [1] => sdgsdgsdg 
          [2] => 4tg34g34g 
         ) 

       ) 

     ) 

並儲存在另一個數組以下幾點:

 array (
    0 => array ( 
     [1] => swgdgbdg 
     [2] => xcbcxb 
) , 
    1 => array(
     [1] => 543h54h 
     [2] => 54hrhhfr2 
) , 
    2 => array(
     [1] => eherfherh 
     [2] => 4564642 
), 
    3 => array(
    [1] => erggb45yt 
    [2] => jyuk768k 
), 
    4 => array(
    [1] => sdgsdgsdg 
    [2] => 4tg34g34g 
) 

); 
+2

我們不是在這裏解決你的家庭作業!你有什麼嘗試? –

+0

我想這是我的功課,我有嘗試的foreach和isset,我不能讓它的工作 – shlomicohen

+0

嘗試遞歸太 –

回答

4

您可以使用array_walk_recursive()來獲得關鍵1, 2,並且不數組元素,這樣,檢查live demo here

$result = []; 
$temp = []; 
array_walk_recursive($array, function($v, $k) use(&$result, &$temp){ 
if($k == 1) 
    $temp[$k] = $v; 
if($k == 2) 
{ 
    $temp[$k] = $v; 
    $result[] = $temp; 
} 
}); 
print_r($result); 

編輯爲未定影長度和無序指數,live demo.

擴展array_walk_recursive()與用於callfunction第三參數以指示它是否在子陣列的開始。

$result = []; 
$temp = []; 
$length = 0; 
uarray_walk_recursive($array, function($v, $k, $f) use(&$result, &$temp, &$length){ 
if(is_numeric($k)) { 
    if($f && $length != 0) { 
    $result[] = $temp; 
    $length = 0; 
    $temp = []; 
    } 
    $temp[$k] = $v; 
    $length++; 
} 
}); 
$result[] = $temp; 
print_r($result); 


function uarray_walk_recursive(&$input, $funcname) 
{ 
    if (!is_callable($funcname)) { 
     if (is_array($funcname)) { 
      $funcname = $funcname[0] . '::' . $funcname[1]; 
     } 
     user_error('uarray_walk_recursive() Not a valid callback ' . $user_func, 
      E_USER_WARNING); 
     return; 
    } 

    if (!is_array($input)) { 
     user_error('uarray_walk_recursive() The argument should be an array', 
      E_USER_WARNING); 
     return; 
    } 

    $args = func_get_args(); 
    $flag = true; 

    foreach ($input as $key => $item) { 
     if (is_array($item)) { 
      $args[2] = false; 
      $flag = true; 
      uarray_walk_recursive($item, $funcname, $args); 
      $input[$key] = $item; 
     } else { 

      $args[2] = $flag; 
      $flag = false; 
      $args[0] = &$item; 
      $args[1] = &$key; 
      call_user_func_array($funcname, $args); 
      $input[$key] = $item; 
     } 
    } 
} 
+0

thankk但我可以有一個數組中的10個數組不僅3和它的隨機順序我可能有4個位置上的數組,並在另一個數組中它可以在8個位置 – shlomicohen

+0

@shlomicohen'array_work_recursive()'是遞歸函數。也適用於你的情況。 –

+0

但我可以具有4現在的位置或8不僅1-2 – shlomicohen

0

function getSomething(var arr) 
{ 
    flag = 0; 
    output = [] 
    for(i = 0 to arr.length) 
    { 
     check arr[i] is array, 
     if yes,then flag = 1 and output.add(getSomething(arr[i])) 
     if not, continue 
    } 
    if flag =0,then return arr 
    else return output; 
} 
+0

我需要的PHP代碼,但由於 – shlomicohen

+0

@shlomicohen你要只是一些功能取代僞代碼 –

+0

我該如何運行它? – shlomicohen