内置PHP函数将结构化数组序列化为隐藏字段

时间:2013-04-15 11:11:57

标签: php html

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

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内置函数?

2 个答案:

答案 0 :(得分: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

这可能不会像现在这样,你可能需要修改一下。 HTH

答案 1 :(得分: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);

这是工作函数.. :))