我的数组看起来像这样:
$arr=array(
'key1'=>'value1',
'key2'=>'value2',
0=>array(
'sub1_key1'=>'sub1_value1',
'sub1_key2'=>'sub1_value2',
),
'key3'=>array(
'sub2_key1'=>'sub2_value1',
'sub2_key2'=>'sub2_value2',
),
//....
);
如何将数组$ arr转换为数组如下:
$arr=array(
'key1'=>'value1',
'key2'=>'value2',
'sub1_key1'=>'sub1_value1',
'sub1_key2'=>'sub1_value2',
'sub2_key1'=>'sub2_value1',
'sub2_key2'=>'sub2_value2',
//....
);
有人可以帮帮我吗?
答案 0 :(得分:4)
$new = array();
foreach ($arr as $key => $value) {
if (is_array($value)) {
foreach ($value as $k => $v) { // having nested loop to save keys and values into new array
$new[$k] = $v;
}
} else {
$new[$key] = $value; // leaving values intact
}
}
print_r($new); // returns Array ( [key1] => value1 [key2] => value2 [sub1_key1] => sub1_value1 [sub1_key2] => sub1_value2 [sub2_key1] => sub2_value1 [sub2_key2] => sub2_value2 )
答案 1 :(得分:4)
试一试。这对你有用。
这不是一件容易的事,因为你要减少multi.dim。数组为单一数组,也忽略第一个数组的键 我测试了以下代码,它产生了你已经显示的结果。
function ChangeArrayToSingleArray($array) {
if (!$array) return false;
$flat = array();
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
foreach ($iterator as $key=>$value)
$flat[$key] = $value;
return $flat;
}
var_dump(ChangeArrayToSingleArray($arr));
输出有点像。
array (size=6)
'key1' => string 'value1' (length=6)
'key2' => string 'value2' (length=6)
'sub1_key1' => string 'sub1_value1' (length=11)
'sub1_key2' => string 'sub1_value2' (length=11)
'sub2_key1' => string 'sub2_value1' (length=11)
'sub2_key2' => string 'sub2_value2' (length=11)
答案 2 :(得分:1)
答案 3 :(得分:1)
你可以尝试
function flatten($array) {
$new_array = array();
foreach ($array as $key => $value) {
if ( is_array($value) ) {
$new_array = array_merge ( $new_array, flatten($value));
} else {
$new_array[$key] = $value;
}
}
return $new_array;
}
然后你可以打电话:
$flattened_array = flatten($arr);
在你的情况下
这将适用于任何深度数组,因为它以递归方式工作
这是php fiddle演示