0

I am looking for a function that will convert this array:

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

into something like:

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

I.e. to "serialize" structured array so that I can easily put it to HTML form as hidden fields and when I read it back from the $_POST, I get exactly the same structure! Is there any PHP built-in function for that?

4

2 に答える 2

3

自分で平らにする必要があります。それを行うことができる組み込みの1行関数はありません。

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

于 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 に答える