在php中查询字符串到数组

时间:2012-09-01 06:37:45

标签: php arrays multidimensional-array

查询字符串

    name=form1

    &settings={"en":{"name":"Form 1","classes":["leftAlign"],"heading":"h2","styles":{"fontFamily":"default","fontSize":"default","fontStyles":[1,0,0]}},"styles":{"color":"default","backgroundColor":"default"}}

    &fields[0].id=null&fields[0].name=password1&fields[0].type=Password&fields[0].settings={"en":{"label":"Password 1","value":"","description":"","styles":{"fontFamily":"default","fontSize":"default","fontStyles":[0,0,0]}},"_persistable":true,"required":true,"restriction":"no","styles":{"label":{"color":"default","backgroundColor":"default"},"value":{"color":"default","backgroundColor":"default"},"description":{"color":"777777","backgroundColor":"default"}}}&fields[0].sequence=0&fields[0].status=

........ 

我需要将其转换为数组输出。我用几个方法将查询字符串解析为数组。这是我得到的输出。但数组'Fields'值未显示。有没有其他方法可以得到它? field [0],fields [1]&领域[2]有关键&价值但没有显示。

Array
(
    [name] => form1
    [settings] => {"en":{"name":"Form 1","classes":["leftAlign"],"heading":"h2","styles":{"fontFamily":"default","fontSize":"default","fontStyles":[1,0,0]}},"styles":{"color":"default","backgroundColor":"default"}}
    [fields] => Array
        (
            [0] => 
            [1] => 
            [2] => 
        )

    [create] => Create
)

2 个答案:

答案 0 :(得分:1)

<?php
 $a = explode('&', $QUERY_STRING); 
 $i = 0; 
 $field = array();
 while ($i < count($a)) {
    $b = split('=', $a[$i]); 
    field[i]= htmlspecialchars(urldecode($b[1])); 
    $i++;
 } ?>

答案 1 :(得分:1)

更新代码

$query = 'name=form1'
        . '&settings={"en":{"name":"Form 1","classes":["leftAlign"],"heading":"h2","styles":{"fontFamily":"default","fontSize":"default","fontStyles":[1,0,0]}},"styles":{"color":"default","backgroundColor":"default"}}'
        . '&fields[0].id=null&fields[0].name=password1&fields[0].type=Password&fields[0].settings={"en":{"label":"Password 1","value":"","description":"","styles":{"fontFamily":"default","fontSize":"default","fontStyles":[0,0,0]}},"_persistable":true,"required":true,"restriction":"no","styles":{"label":{"color":"default","backgroundColor":"default"},"value":{"color":"default","backgroundColor":"default"},"description":{"color":"777777","backgroundColor":"default"}}}&fields[0].sequence=0&fields[0].status='
        //adding fields[1]
        . "&fields[1].id=null&fields[1].name=f1name&fields[1].type=f1type";

$resultArray = array();
foreach (explode('&', $query) as $pair) {
    list($key, $value) = explode('=', $pair);

    //a dot present
    if (strpos($key, '.') !== false) {
        list($subKey, $subVal) = explode('.', $key);

        if (preg_match('/(?P<name>\w+)\[(?P<index>\w+)\]/', $subKey, $matches)) {
            $resultArray[$matches['name']][$matches['index']][$subVal] = $value;
        } else {
            $resultArray[$subKey][$subVal] = $value;
        }
    } else {
        $resultArray[$key] = $value;
    }
}

echo '<pre>' . print_r($resultArray, true) . '</pre>';

<强>输出

Array
(
    [name] => form1
    [settings] => {"en":{"name":"Form 1","classes":["leftAlign"],"heading":"h2","styles":{"fontFamily":"default","fontSize":"default","fontStyles":[1,0,0]}},"styles":{"color":"default","backgroundColor":"default"}}
    [fields] => Array
        (
            [0] => Array
                (
                    [id] => null
                    [name] => password1
                    [type] => Password
                    [settings] => {"en":{"label":"Password 1","value":"","description":"","styles":{"fontFamily":"default","fontSize":"default","fontStyles":[0,0,0]}},"_persistable":true,"required":true,"restriction":"no","styles":{"label":{"color":"default","backgroundColor":"default"},"value":{"color":"default","backgroundColor":"default"},"description":{"color":"777777","backgroundColor":"default"}}}
                    [sequence] => 0
                    [status] => 
                )

            [1] => Array
                (
                    [id] => null
                    [name] => f1name
                    [type] => f1type
                )

        )

)