基本上我的应用程序正在与一个发送回奇怪的多维数组的Web服务进行交互,例如:
Array
(
[0] => Array
(
[Price] => 1
)
[1] => Array
(
[Size] => 7
)
[2] => Array
(
[Type] => 2
)
)
这不是问题,但问题是服务不断更改这些项的索引,因此在下一个数组中,Price可以是1而不是0。
如何有效地将这样的数组转换为单维数组,以便通过$ var ['Size']而不是$ var [1] ['Size']来访问变量?
感谢您的帮助
答案 0 :(得分:30)
$result = call_user_func_array('array_merge', $array);
答案 1 :(得分:9)
像这样:
$result = array();
foreach($array as $inner) {
$result[key($inner)] = current($inner);
}
$result
数组现在看起来像这样:
Array
(
[Price] => 1
[Size] => 7
[Type] => 2
)
答案 2 :(得分:7)
我正在使用laravel的助手:http://laravel.com/api/source-function-array_flatten.html#179-192
function array_flatten($array)
{
$return = array();
array_walk_recursive($array, function($x) use (&$return) { $return[] = $x; });
return $return;
}
答案 3 :(得分: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;
}
答案 4 :(得分: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;
}
答案 5 :(得分:0)
我认为我找到了最佳解决方案:
array_walk_recursive($yourOLDmultidimarray, function ($item, $key) {
//echo "$key holds $item\n";
$yourNEWarray[]=$item;
});
答案 6 :(得分:0)