将PHP多维数组转换为简单数组

3
哪种方法是将多维数组转换为简单数组的最佳实践?
例如,将以下多维数组: Array ( [0] => Array ( [id] => 11 ) [1] => Array ( [id] => 14 ) ) 转换成一个“扁平化”的数组: Array ( [0] => 11 [1] => 14 ) 除了使用foreach循环、implode或大型函数之外,是否有更简单的方法?是否有PHP函数可以处理此类操作呢?

原始数组的大小是多少?您是要寻找一个速度优化的版本还是只需要一个简单的算法? - Yzmir Ramirez
这被称为“扁平化”数组。搜索“flatten array PHP”会返回许多可能的函数。不幸的是,没有array_flatten函数。 - Waleed Khan
你想要能够从压缩版本重建原始数组吗? - Yzmir Ramirez
@YzmirRamirez 原始数组是第一个发布的。它总是以那种格式出现,或多或少地包含数组。 - CyberJunkie
@YzmirRamirez 不,只是扁平化数组。 - CyberJunkie
显示剩余2条评论
4个回答

3
$array = array();
$newArray = array();

foreach ( $array as $key => $val )
{
    $temp = array_values($val);
    $newArray[] = $temp[0];
}

在这里可以看到它的实际应用:http://viper-7.com/sWfSbD


这是函数形式:

function array_flatten ( $array )
{
    $out = array();

    foreach ( $array as $key => $val )
    {
        $temp = array_values($val);
        $out[] = $temp[0];
    }

    return $out;
}

看看它在这里的实际应用:http://viper-7.com/psvYNO

啊...我们不需要键了...array_values() +1 - Yzmir Ramirez
@YzmirRamirez - 是的。这是我总是使用的非常简单的技巧 - Joseph Silber
太棒了,Joseph!使用键是个聪明的想法。 - Jared Drake

2
您可以使用array_walk_recursive函数来展开一个数组。
$ret = array(); 
array_walk_recursive($arr, function($var) use (&$ret) { 
  $ret[] = $var; 
}); 
var_dump($ret); 

1
如果您有一个不应该是多维数组的多维数组(具有相同的键和值),并且它具有多个深度的维度,您可以使用递归来循环遍历它,并将每个项目附加到新数组中。只要确保不会因此感到头痛 :)

0
这里有一个例子。(它可能不像xdazz那样“优雅”,但是它是一种不使用“use”闭包的替代方法。)数组可能是这样开始的: 开始
array (size=2)
  0 => 
    array (size=1)
      'woeid' => string '56413072' (length=8)
  1 => 
    array (size=1)
      'woeid' => string '56412936' (length=8)      

那么您可能想要这样的东西:

目标

   array (size=2)
      0 => string '56413072' (length=8)
      1 => string '56412936' (length=8)

您可以使用array_walk_recursive代码
$woeid = array();
array_walk_recursive($result['results']['Result'], function ($item, $key, $woeid) {
     if ($key == 'woeid') {                                       
           $woeid[] = $item;
     }
}, &$woeid);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接