2012-09-01 72 views
0

查询字符串查询字符串数组在PHP

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'值没有显示。有没有其他的方法来获得这个?字段[0],字段[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 
) 
+0

你尝试哪些功能? – knightrider

+0

我刚刚打印$ _GET,我得到了这个输出。同时我使用echo $ str = urldecode($ _ SERVER ['QUERY_STRING']); //获取查询srting $ s = parseQueryString($ str); //功能 \t function parseQueryString($ str){ \t \t $ op = array(); \t \t $ pairs = explode(“&”,$ str); \t \t的foreach($对作为$对){ \t \t \t列表($ K,$ V)= array_map( “urldecode”,爆炸( “=”,$对)); \t \t \t $ op [$ k] = $ v; \t \t} \t \t return $ op; \t} reset($ s); (列表($ key,$ value)= each($ s)){ “Key:$ key; Value:$ value
\ n”; } – Parthi04

+0

@knightrider请给点指导 – Parthi04

回答

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 
       ) 

     ) 

) 
+0

如何将字段[0]和字段[1]分组? – Parthi04

+0

@ Parthi04 - 看我更新的代码...希望这可以帮助你... :) – rajukoyilandy

+0

伟大的代码...它的工作。 – Parthi04

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++; 
} ?> 
+0

@ Parthi04如果这能为你工作,请接受答案 – knightrider