PHP的parse_str是一個(gè)非常強(qiáng)大的函數(shù),可以將查詢字符串解析為一個(gè)數(shù)組。
我們來看一個(gè)簡(jiǎn)單的例子,假設(shè)有這樣一個(gè)查詢字符串:key1=value1&key2=value2&key3=value3。用parse_str函數(shù)解析后,得到的是這么一個(gè)關(guān)聯(lián)數(shù)組:
<?php $query_string = 'key1=value1&key2=value2&key3=value3'; parse_str($query_string, $result); print_r($result); ?>
輸出結(jié)果是:
Array ( [key1] => value1 [key2] => value2 [key3] => value3 )
parse_str函數(shù)不僅可以解析簡(jiǎn)單的查詢字符串,還可以解析類似這樣的復(fù)雜查詢字符串:
<?php $query_string = 'key1=val1&key2[]=val2a&key2[]=val2b&key2[key3]=val2c&key4[key5]=val4a&key4[key6][]=val4b&key4[key6][]=val4c'; parse_str($query_string, $result); print_r($result); ?>
輸出結(jié)果是:
Array ( [key1] => val1 [key2] => Array ( [0] => val2a [1] => val2b [key3] => val2c ) [key4] => Array ( [key5] => val4a [key6] => Array ( [0] => val4b [1] => val4c ) ) )
我們可以發(fā)現(xiàn),parse_str將查詢字符串解析為了一個(gè)多維關(guān)聯(lián)數(shù)組。
如果我們想要把這個(gè)數(shù)組轉(zhuǎn)換成查詢字符串,可以使用PHP中的http_build_query函數(shù)。例如:
<?php $query_array = array( 'key1' => 'val1', 'key2' => array( 'val2a', 'val2b', 'key3' => 'val2c' ), 'key4' => array( 'key5' => 'val4a', 'key6' => array( 'val4b', 'val4c' ) ) ); $query_string = http_build_query($query_array); echo $query_string; ?>
輸出結(jié)果是:
key1=val1&key2%5B0%5D=val2a&key2%5B1%5D=val2b&key2%5Bkey3%5D=val2c&key4%5Bkey5%5D=val4a&key4%5Bkey6%5D%5B0%5D=val4b&key4%5Bkey6%5D%5B1%5D=val4c
可以看到,http_build_query將關(guān)聯(lián)數(shù)組轉(zhuǎn)換成了一個(gè)查詢字符串。
還有一點(diǎn)需要注意的是,parse_str和http_build_query函數(shù)對(duì)特殊字符的處理方式是不同的。例如,PHP中的http_build_query函數(shù)會(huì)將空格轉(zhuǎn)換為加號(hào),而parse_str函數(shù)則不會(huì)做任何處理。如果我們需要將查詢字符串中的空格轉(zhuǎn)換為加號(hào),需要手動(dòng)處理。例如:
<?php $query_string = 'key1=value1&key2=value 2&key3[value 3]=value 3'; $query_string = str_replace(' ', '+', $query_string); parse_str($query_string, $result); print_r($result); ?>
輸出結(jié)果是:
Array ( [key1] => value1 [key2] => value 2 [key3] => Array ( [value 3] => value 3 ) )
可以看到,我們手動(dòng)將查詢字符串中的空格替換成了加號(hào),并正確地解析出了關(guān)聯(lián)數(shù)組。
總結(jié)一下,parse_str函數(shù)是一個(gè)非常實(shí)用的函數(shù),用于將查詢字符串解析成一個(gè)多維關(guān)聯(lián)數(shù)組。一定要注意特殊字符的處理方式,并且不要忘記使用http_build_query函數(shù)將關(guān)聯(lián)數(shù)組轉(zhuǎn)換為查詢字符串。