有URL參數: -解析嵌套的數組了URL
/name/Aario/gender/male/addr[nation][key][sx]/China/addr[city]/Shanghai
正如你可以看到,有兩個類似數組的字符串。我想將它們轉換成數組['addr' => ['nation' => ['key' => ['sx' => China]]], ['city' => 'Shanghai']]
我想: -
$results = [];
$str = '/name/Aario/gender/male/addr[nation][key][sx]/China/addr[city]/Shanghai/';
$params = explode('/', $str);
if($params[0] == '') unset($params[0]);
while(key($params) !== null && current($params)) {
$key = current($params);
$value = next($params);
if(strpos($key, '[')) {
$sub_keys = explode('[', $key);
foreach($sub_keys as &$sub_key) {
$sub_key = trim($sub_key, ']');
}
$count = count($sub_keys);
$ref = &$results;
foreach($sub_keys as $k => $v) {
if($k == $count - 1) {
$ref[$v] = $value;
$ref = &$ref[$v];
} else {
$ref[$v] = $ref[$v] ?? [];
$ref = &$ref[$v];
}
}
} else {
$results[$key] = $value;
}
next($params);
}
var_dump($results);
它的工作原理。它得到:
array(3) {
["name"]=> string(5) "Aario"
["gender"]=> string(4) "male"
["addr"]=> array(2) {
["nation"]=> array(1) {
["key"]=> array(1) {
["sx"]=> string(5) "China"
}
}
["city"]=> &string(8) "Shanghai" // please notice here
}
}
但是我害怕參考文獻(&
)會犯錯誤。
有沒有更好的方法來做到這一點?
你需要改變你的鏈接結構,通過它您收到這類網址。更容易和正確的工作。 –
這只是一種特殊的需要...... – AarioAi