转换器数组到数组php中的键和值

时间:2014-03-09 12:08:43

标签: php arrays

我的数组看起来像这样:

$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',
   //....
);
有人可以帮帮我吗?

4 个答案:

答案 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 )

DEMO

答案 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)

使用可帮助您http://au2.php.net/array_walk

的array_walk()函数

答案 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演示