dthdlv9777 2015-10-30 22:10
浏览 26
已采纳

将多维数组转换为单个类似HTML的数组? [关闭]

What is the fastest or most convenient possible way to convert a multi-dimensional array to a single HTML-like array (the method that is used to set the name attribute in HTML forms)? For example,

$ar = [
    'x' => ['a' => 1, 'b' => 2, 'c' => 3],
    'y' => ['yy' => ['yyy' => 3]],
    'z' => 3333,
    'm' => [1, 2],
];

should be converted to:

  $ar = [
        'x[a]' => 1,
        'x[b]' => 2,
        'x[c]' => 3,
        'y[yy][yyy]' => 3,
        'z' => 3333,
        'm[0]' => 1,
        'm[1]' => 2,
    ];

Here is my first try:

$ar = [
    'x' => ['a' => 1, 'b' => 2, 'c' => 3],
    'y' => ['yy' => ['yyy' => '3']],
    'z' => 3333,
    'm' => [1, 'x']
];

function convert($key, $value, &$new)
{
    foreach ($value as $k => $v) {
        if (is_array($v)) {
            convert($key."[$k]", $v, $new);
        }
        else {
            $new[$key."[$k]"] = $v;
        }
    }
}
$r = [];
convert(null, $ar, $r);
print_r($r);;
  • 写回答

1条回答 默认 最新

  • doume5227 2015-10-30 23:23
    关注

    I do not know about speed, but this is a convenient way to do the trick:

    $ar = convert_array( $ar );
    
    function convert_array( $a, $key = '' ) {
        static $arr = array();
        foreach( $a as $k => $v ) {
            $key_name = $key == '' ? $k : $key . '[' . $k . ']';
            if ( is_array( $v) ) {
                convert_array( $v, $key_name );
            } else {
                $arr[$key_name] = $v;
            }
        }
        return $arr;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题