更优雅的方法来删除中间阵列?

时间:2014-04-02 17:02:19

标签: php arrays

拥有这个“漂亮的”多维数组:

array 
  0 => 
    array 
      0 => 
        object(SimpleXMLElement)
          public 'name' => string 'some name'
          public 'model' => string 'some model'
      1 => 
        object(SimpleXMLElement)
          public 'name' => string 'some name'
          public 'model' => string 'some model'
  1 => 
    array 
      0 => 
        object(SimpleXMLElement)
          public 'name' => string 'some name'
          public 'model' => string 'some model'
      1 => 
        object(SimpleXMLElement)
          public 'name' => string 'some name'
          public 'model' => string 'some model'

and so on

我删除了中间数组以获得一个带循环(并将对象转换为数组):

foreach ($items as $x) {
    foreach ($x as $y) {
        $item[] = (array) $y;
    }
}

结果是:

array 
  0 => 
    array
      'name' => string 'some name'
      'model' => string 'some model'
  1 => 
    array
      'name' => string 'some name'
      'model' => string 'some model'
  2 => ...
  3 => ...
  etc.

它完成了工作(在其中创建了包含4个数组的数组),但我想知道什么是更干净的方法呢?是的,循环1000+阵列绝对不是最好的主意。我不是在寻找确切的代码,只是想法。

2 个答案:

答案 0 :(得分:3)

foreach ($items as $x) {
    foreach ($x as $y) {
        $item[] = (array) $y;
    }
}

你拥有的解决方案是最好的,因为如果你使用array_merge(),你就不会有冲突的密钥,时间复杂度是O(n),这是非常好的。

答案 1 :(得分:1)

可能不是更好或更快(未经测试),而是替代:

$result = array_map('get_object_vars', call_user_func_array('array_merge', $items));

或者:

foreach(call_user_func_array('array_merge', $items) as $o) {
    $result[] = (array)$o;
}