2012-02-23 114 views
2

可能重复:
Convert multidimensional array into single arrayPHP的多维数组简单数组

我有此数组:

Array 
(
    [one] => one_value 
    [two] => Array 
     (
      [four] => four_value 
      [five] => five_value 
     ) 

    [three] => Array 
     (
      [six] => Array 
       (
        [seven] => seven_value 
       ) 

     ) 

) 

我想将其转换为这种类型的数组:

Array 
(
    [one] => one_value 
    [two-four] => four_value 
    [two-five] => five_value 
    [three-six-seven] => seven_value 
) 

我怎样才能做到这一点?用某种“递归”?但是如何? :\ 在此先感谢!

+0

@Yoel是,如果你要保存的数组其结构在数据库类型“key”=>“value”中,所以你可以用一个简单的人来重建它至少这是我迄今为止最好的理想..可能不是最好的? – MGP 2012-02-23 16:18:27

+0

对于合并键,请参阅[递归获取阵列的主要创造下划线分隔字符串(http://stackoverflow.com/q/2749398/367456) – hakre 2012-02-23 16:19:06

回答

3
<?php 
$array = array(
    'one' => 'one_value', 
    'two' => array 
     (
      'four' => 'four_value', 
      'five' => 'five_value' 
     ), 

    'three' => array 
     (
      'six' => array 
       (
        'seven' => 'seven_value' 
       ) 

     ) 
); 

function flatten($array, $prefix = '') { 
    $arr = array(); 
    foreach($array as $k => $v) { 
     if(is_array($v)) { 
      $arr = array_merge($arr, flatten($v, $prefix . $k . '-')); 
     } 
     else{ 
      $arr[$prefix . $k] = $v; 
     } 
    } 
    return $arr; 
} 

var_dump(flatten($array)); 

//output: 
//array(4) { 
// ["one"]=> 
// string(9) "one_value" 
// ["two-four"]=> 
// string(10) "four_value" 
// ["two-five"]=> 
// string(10) "five_value" 
// ["three-six-seven"]=> 
// string(11) "seven_value" 
//} 

Running example

+0

会“unflatten”遵循相同的IDEIA不知何故? – MGP 2012-02-23 17:09:20

+0

我不认为你需要递归unflatten它(尽管你可以)。 – jprofitt 2012-02-23 17:34:11

+0

你失去了我,对不起..然后我怎么可能? – MGP 2012-02-23 17:38:53

1

您可以实现递归处理用栈:

$separator = '-'; 
$flat = array(); 

while ($array); 
{ 
    $key = key($array); 
    $value = array_shift($array); 

    if (is_array($value)) 
    { 
     foreach($value as $subKey => $node) 
     { 
      $array[$key.$separator.$subKey] = $node; 
     } 
    } 
    else 
    { 
     $flat[$key] = $value; 
    } 
} 

输出(Demo):

Array 
(
    [one] => one_value 
    [two-four] => four_value 
    [two-five] => five_value 
    [three-six-seven] => seven_value 
)