2010-07-11 3 views
2

Supposons que j'ai des tableaux comme:tableau Aplatir PHP 5 (solution non trouvée à la recherche SOF)

$arr['foo']['bar']['test'] = 'value'; 
$arr['noo']['boo'] = 'value'; 
$arr['goo'] = 'value'; 
$arr['hi'][] = 'value'; // $arr['hi'][0] 
$arr['hi'][] = 'value2'; // $arr['hi'][1] 

Je dois convertir cela, à:

$arr['foo[bar][test]'] = 'value'; 
$arr['noo[boo]'] = 'value'; 
$arr['goo'] = 'value'; 
$arr['hi[0]'] = 'value'; 
$arr['hi[1]'] = 'value2'; 

J'ai essayé d'écrire une fonction récursive , bien qu'il semble que j'ai un manque de logique pour cela. J'apprécie l'aide pour écrire ce code.

Beaucoup de gens continuent à demander pourquoi j'ai besoin de cela? Eh bien .. c'est pour mon cours et je trouve ça très utile.

Répondre

1

Basé sur le premier commentaire ici: http://php.net/manual/en/function.array-values.php

<?php 

$arr['foo']['bar']['test'] = 'value1'; 
$arr['noo']['boo'] = 'value2'; 
$arr['goo'] = 'value3'; 
$arr['hi'][] = 'value4'; // $arr['hi'][0] 
$arr['hi'][] = 'value5'; // $arr['hi'][1] 

function array_flatten($a,$f=array(), $prefix = "") { 
    if(!$a||!is_array($a))return ''; 
    foreach($a as $key=>$value) { 
    if(is_array($value)) { 
     $pref = ($prefix === "") ? $key : $prefix . "[$key]"; 
     $f = array_flatten($value,$f, $pref); 
    } else { 
     $pref = ($prefix === "") ? $key : $prefix . "[$key]";   
     $f[ $pref ] = $value; 
    } 
    } 
    return $f; 
} 

var_dump(array_flatten($arr)); 

/* 

Expected output: 

$arr['foo[bar][test]'] = 'value1'; 
$arr['noo[boo]'] = 'value2'; 
$arr['goo'] = 'value3'; 
$arr['hi[0]'] = 'value4'; 
$arr['hi[1]'] = 'value5'; 

My output: 

array(5) { 
    ["foo[bar][test]"]=> 
    string(6) "value1" 
    ["noo[boo]"]=> 
    string(6) "value2" 
    ["goo"]=> 
    string(6) "value3" 
    ["hi[0]"]=> 
    string(6) "value4" 
    ["hi[1]"]=> 
    string(6) "value5" 
} 

*/ 
?> 
Questions connexes