PHP:将多维数组转换为一维数组

8
基本上,我的应用程序与一个web服务进行交互,该服务返回一个奇怪的多维数组,例如:
Array
(
    [0] => Array
        (
            [Price] => 1
        )
    [1] => Array
        (
            [Size] => 7
        )
    [2] => Array
        (
            [Type] => 2
        )
)

这不是问题,但问题在于服务会保持更改那些项的索引,因此在下一个数组中,价格可能在1而不是0。

如何高效地将这样的数组转换为单维数组,以便我可以通过$var['Size']访问变量,而不是$var[1]['Size']?

感谢您的帮助。

7个回答

30
$result = call_user_func_array('array_merge', $array);

4
请注意,这要求第二层数组键名不相同。否则,它们将被合并,仅返回单个结果。 - Tom

9

像这样:

$result = array();

foreach($array as $inner) {
    $result[key($inner)] = current($inner);        
}
$result数组现在会是这个样子:
Array
(
    [Price] => 1
    [Size] => 7
    [Type] => 2
)

1
如果是3个维度,这还不够深入。 - ChristoKiwi

7

这个方法适用于包括三维在内的多维数组。太棒了! - ChristoKiwi

4
function flattenArray($input, $maxdepth = NULL, $depth = 0)
{
    if(!is_array($input)){ 
      return $input;
    }

    $depth++;
    $array = array(); 
    foreach($input as $key=>$value){
      if(($depth <= $maxdepth or is_null($maxdepth)) && is_array($value)){
        $array = array_merge($array, flattenArray($value, $maxdepth, $depth));
      } else {
        array_push($array, $value);
        // or $array[$key] = $value;
      }
    }
    return $array;
}

0
考虑 $mArray 作为多维数组和 $sArray 作为单维数组,此代码将忽略父数组。
function flatten_array($mArray) {
    $sArray = array();

    foreach ($mArray as $row) {
        if ( !(is_array($row)) ) {
            if($sArray[] = $row){
            }
        } else {
            $sArray = array_merge($sArray,flatten_array($row));
        }
    }
    return $sArray;
}

0

0

我认为我找到了最好的解决方案:

array_walk_recursive($yourOLDmultidimarray, function ($item, $key) {
    //echo "$key holds $item\n";
$yourNEWarray[]=$item;
});


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