代码之家  ›  专栏  ›  技术社区  ›  Gajus

展平数组PHP5(在SOF搜索中找不到解决方案)

  •  2
  • Gajus  · 技术社区  · 16 年前

    $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 回复  |  直到 16 年前
        1
  •  1
  •   MartyIX    16 年前

    根据第一条评论: 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"
    }
    
    */
    ?>
    
    推荐文章