第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

大寫數(shù)組鍵和小寫數(shù)組值(從 parse_str 輸入)

大寫數(shù)組鍵和小寫數(shù)組值(從 parse_str 輸入)

PHP
蠱毒傳說 2023-04-15 16:49:32
感覺這個問題已經(jīng)解決了,但我的搜索沒有找到“好的”解決方案。我有一個時間緊迫的應(yīng)用程序,需要將典型的字符串轉(zhuǎn)換為關(guān)聯(lián)數(shù)組:"appliCAation=webCALL&Arg1=ABC&arG2=xyZ&someMore=Dec-1950"我知道我可以使用parse_str()它,但我想“規(guī)范化”用戶輸入,以便所有鍵始終大寫,所有值始終小寫(反之亦然,如果可能的話,通過參數(shù)完成并且不擴(kuò)大代碼的占用空間) .由于array_change_key_case()不遞歸工作,我尋找一種代碼行少且性能高效的優(yōu)雅方式。目前我使用parse_str( strtolower( $input ), $arr );然后循環(huán)(遞歸)數(shù)組來更改鍵。不幸的是,這需要兩種方法和“許多”代碼行。有沒有更快/更好/更小的解決方案?
查看完整描述

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);


查看完整回答
反對 回復(fù) 2023-04-15
  • 1 回答
  • 0 關(guān)注
  • 128 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號