1 回答

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個贊
翻轉(zhuǎn)您的邏輯并將所有內(nèi)容大寫,然后遞歸地將值小寫:
parse_str(strtoupper($string), $array);
array_walk_recursive($array, function(&$v, $k) { $v = strtolower($v); });
這將適用于多個維度,例如:
$string = "appliCAation=webCALL&Arg1=ABC&arG2=xyZ&someMore=Dec-1950&a[yZ][zzz]=efG";
產(chǎn)量:
Array
(
[APPLICAATION] => webcall
[ARG1] => abc
[ARG2] => xyz
[SOMEMORE] => dec-1950
[A] => Array
(
[YZ] => Array
(
[ZZZ] => efg
)
)
)
重讀問題后,我發(fā)現(xiàn)您希望能夠更改或控制鍵和值是大寫還是小寫。您可以將use()參數(shù)數(shù)組用作函數(shù)名稱:
$params = ['key' => 'strtoupper', 'val' => 'strtolower'];
parse_str($params['key']($string), $array);
array_walk_recursive($array, function(&$v, $k) use($params){ $v = $params['val']($v); });
要僅更改鍵,我會在原始字符串上使用正則表達(dá)式:
$keys = 'strtoupper';
$string = preg_replace_callback('/[^=&]*=/', function($m) use($keys) { return $keys($m[0]); }, $string);
parse_str($string, $array);
[^=&]*=是一個字符類[],匹配^不是=或&0 次或多次*后跟=.
最后,如果您提供一個函數(shù)名(注意val是空的),這里將執(zhí)行鍵和值,否則它不會被轉(zhuǎn)換:
$params = ['key' => 'strtoupper', 'val' => ''];
$string = preg_replace_callback('/([^=&]*)=([^=&]*)/',
function($m) use($params) {
return (empty($params['key']) ? $m[1] : $params['key']($m[1]))
.'='.
(empty($params['val']) ? $m[2] : $params['val']($m[2]));
}, $string);
parse_str($string, $array);
- 1 回答
- 0 關(guān)注
- 128 瀏覽
添加回答
舉報