压扁数组PHP 5(在SOF搜索中找不到解决方案)

时间:2010-07-11 09:58:44

标签: php arrays

假设我有以下数组:

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

我需要将此转换为:

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

我试过写一个递归函数,虽然看起来我缺乏逻辑。感谢您撰写此代码的帮助。

很多人一直在问我为什么需要这个?嗯..这是我的表格类,我发现它非常有用。

1 个答案:

答案 0 :(得分:1)

根据此处的第一条评论: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"
}

*/
?>