2012-02-23 22 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"の構造を持つので、単純な人で再構築できますner ..少なくともこれは私がこれまでに得た最高のイデアです。おそらく最高ではありませんか? – MGP

+0

キーをマージするには、[配列のキーを再帰的に取得し、アンダースコアを区切った文字列を作成する]を参照してください(http://stackoverflow.com/q/2749398/367456) – hakre

答えて

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

「イライラされませんか? – MGP

+0

私はあなたがそれを再帰的に平滑化する必要はないと思います。 – jprofitt

+0

あなたは私を失った、ごめんなさい..そしてどうすればいい? – MGP

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 
)