0

我正在寻找一个可以转换这个数组的函数:

array(1) {
  ["a"]=>
  array(2) {
    ["b"]=>
    int(1)
    ["c"]=>
    string(5) "hello"
  }
}

变成类似的东西:

array(2) {
  ["a[b]"]=>
  int(1)
  ["a[c]"]=>
  string(5) "hello"
}

即“序列化”结构化数组,以便我可以轻松地将其作为隐藏字段放入 HTML 表单中,当我从 中读取它时$_POST,我得到完全相同的结构!是否有任何PHP内置函数?

4

2 回答 2

3

你需要自己把它弄平。没有内置的单行函数可以做到这一点。

function flattenArr($arr, $key, &$result) {
    foreach ($arr as $k => $v) {
        if (is_array($v)) {
            flattenArr($v, $key . "[$k]", $result);
        } else {
            $result[$key . "[$k]"] = $v;
        }
    }
}

$obj = array("a" => array("b" => "c", "d" => array("1"=>array(1,2,3,5),"2", "3")));
$result = array();
flattenArr($obj, "", $result);
foreach ($result as $k => $v) {
    echo "result$k = $v\n";
}

输出:

result[a][b] = c
result[a][d][1][0] = 1
result[a][d][1][1] = 2
result[a][d][1][2] = 3
result[a][d][1][3] = 5
result[a][d][2] = 2
result[a][d][3] = 3

这可能不会像现在这样,您可能需要对其进行一些修改。高温高压

于 2013-04-15T11:42:52.520 回答
2
$arr = array(
        "a"=> array( "b"=>1, "c"=>"hello", "d"=> array( "e"=>3, "j"=>"wow") ),
        "z"  => array( "za"=>22, "tt"=>'wos')
    );

function loop_it($array, $arr=array(), $Mkey = false){
    foreach ($array as $key => $value) {
        $_key = $Mkey ? $Mkey . "[" . $key . "]" : $key;
        if(is_array($value)){
            $arr += loop_it($value, $arr, $_key);
        } else{
            $arr[$_key] = $value;
        }
    }
    return $arr;
}

$return = loop_it($arr);    
var_dump($return);

这是工作功能..:)

于 2013-04-15T11:35:38.810 回答