2011-09-29 40 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

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