2011-09-29 39 views
0

外陣列我有一些功能,與在陣列格式提供的數據處理。這些功能都做同樣的工作,所以我想將它們合併成一個單一的功能。卸下在PHP

的問題是,它們中的每接收具有不同深度的數組:一維,二維和使用三維陣列,並且在未來的一些實施方式中,甚至可以使用四維陣列。

在任何情況下,顯著和必要的數據總是在兩個最靠裏的陣列,所以我需要擺脫外部陣列,直到我只有最裏面的兩個級別。 我懷疑是不是簡單的如何做到這一點,但如何做到這一點優雅和有效地,因爲我覺得我目前的方法相當笨拙。

當前方法:

function add() { 
    $data = func_get_args(); 
    if(count($data)>0) { 
     if(is_array($data[0])) { 
      if(is_array($data[0][0])) { 
       foreach($data[0] as $row) { 
        $this->items[] = $row; 
       } 
      } else { 
       $this->items[] = $data[0]; 
      } 
     } else { 
      $this->items[] = $data; 
     } 
    } 
} 

一些使用實例:

$list->add('one', 'two', 'three', 'four', 'five'); 

$list->add($data_from_DB_in_array_format); 

$list->add(
    array(
     array('one', 'two', 'three', 'four', 'five'), 
     array('six', 'seven', 'eight', 'nine', 'ten') 
     ) 
    ); 

$list->add(
    array(
     array(
      array('one', 'two', 'three', 'four', 'five'), 
      array('six', 'seven', 'eight', 'nine', 'ten') 
      ) 
     ) 
    ); 

由於數據經由func_get_args回收(),一切都被置於一個額外的陣列內。

的結果必須是這樣的:

array(
     array('one', 'two', 'three', 'four', 'five'), 
     array('six', 'seven', 'eight', 'nine', 'ten') 
     ); 
+0

你目前的方法是什麼? –

+0

請提供各種數據結構的 –

+0

的func_get_args的一些例子()被需要的,因爲在一個實例中的數據被傳遞不作爲數組但是與元件的變化的量列表。 –

回答

1

只有一個辦法可以做到這一點,它是用遞歸和一點點陣列功能神奇。這可能不是你的確切解決方案,但應該讓你開始,如果你需要更多的幫助,請關注我:

<?php 

$data = array(
    'test1' => array(
     'test2' => array(
      'test3' => array(
       'test4' => array(
        1, 
        2, 
        3 
       ), 
       'test5' => array(
        4, 
        5, 
        6 
       ), 
       'test6' => array(
        7, 
        8, 
        9 
       ), 
      ) 
     ) 
    ) 

); 
function returnLast2Levels($item){ 
    if(is_array($item) && is_array(reset($item)) && is_array(reset(reset($item)))){ 
     //This $item has more than 2 levels, delve deeper 
     return returnLast2Levels(reset($item)); 
    }elseif(is_array($item) && is_array(reset($item)) && !is_array(reset(reset($item)))){ 
     //This $item has 2 levels deep of array 
     return $item; 
    } 
} 

var_dump(returnLast2Levels($data)); 
+0

完美!那正是我期待的! –