PHP的parse_str是一個非常強大的函數,可以將查詢字符串解析為一個數組。
我們來看一個簡單的例子,假設有這樣一個查詢字符串:key1=value1&key2=value2&key3=value3。用parse_str函數解析后,得到的是這么一個關聯數組:
<?php $query_string = 'key1=value1&key2=value2&key3=value3'; parse_str($query_string, $result); print_r($result); ?>
輸出結果是:
Array ( [key1] => value1 [key2] => value2 [key3] => value3 )
parse_str函數不僅可以解析簡單的查詢字符串,還可以解析類似這樣的復雜查詢字符串:
<?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); ?>
輸出結果是:
Array ( [key1] => val1 [key2] => Array ( [0] => val2a [1] => val2b [key3] => val2c ) [key4] => Array ( [key5] => val4a [key6] => Array ( [0] => val4b [1] => val4c ) ) )
我們可以發現,parse_str將查詢字符串解析為了一個多維關聯數組。
如果我們想要把這個數組轉換成查詢字符串,可以使用PHP中的http_build_query函數。例如:
<?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; ?>
輸出結果是:
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將關聯數組轉換成了一個查詢字符串。
還有一點需要注意的是,parse_str和http_build_query函數對特殊字符的處理方式是不同的。例如,PHP中的http_build_query函數會將空格轉換為加號,而parse_str函數則不會做任何處理。如果我們需要將查詢字符串中的空格轉換為加號,需要手動處理。例如:
<?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); ?>
輸出結果是:
Array ( [key1] => value1 [key2] => value 2 [key3] => Array ( [value 3] => value 3 ) )
可以看到,我們手動將查詢字符串中的空格替換成了加號,并正確地解析出了關聯數組。
總結一下,parse_str函數是一個非常實用的函數,用于將查詢字符串解析成一個多維關聯數組。一定要注意特殊字符的處理方式,并且不要忘記使用http_build_query函數將關聯數組轉換為查詢字符串。