[精讚] [會員登入]
3592

[PHP]解決ksort新增的SORT_NATURAL|SORT_FLAG_CASE方法

php>=5.4中ksort函數多了SORT_NATURAL 和 SORT_FLAG_CASE 旗標,對舊版的PHP中要怎麼辦?

分享此文連結 //n.sfs.tw/10245

分享連結 [PHP]解決ksort新增的SORT_NATURAL|SORT_FLAG_CASE方法@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-24 09:56:14 最後編修
2016-11-17 00:48:51 By 張○○
 

php>=5.4 的版本中,ksort函數多了兩個 SORT_NATURALSORT_FLAG_CASE 這兩個 sort_flags[1]

如果這樣的函數

  ksort($arr, SORT_NATURAL | SORT_FLAG_CASE);

用在php<5.4 環境中,就會出現這樣的錯誤:

  PHP Notice: Use of undefined constant SORT_NATURAL - assumed 'SORT_NATURAL' in ..

  PHP Notice: Use of undefined constant SORT_FLAG_CASE - assumed 'SORT_FLAG_CASE' in ..

把系統的php升級到5.4以上並不是最好的解決方法,因為解決這個問題,可能會導致更多的問題出現。

php<5.4有兩個原生的函數 natsort和 natcasesort 不能解決這個問題,因為ksort是以key值排序,這兩個是以值排序。所以必要有更有效的方法,後來找到高手John Resig及 Timo Tijhof寫出的解決方法[2]

/**
 * PHP has natsort() but no natksort().
 *
 * @source http://stackoverflow.com/a/1186347/319266
 * @seealso php.net/uksort, php.net/natsort, php.net/strnatcmp
 */
function natksort( &$array ) {
    uksort( $array, 'strnatcmp' );
}

/**
 * PHP has natcasesort() but no natcaseksort().
 *
 * @source http://stackoverflow.com/a/1186347/319266
 * @seealso php.net/uksort, php.net/natcasesort, php.net/strnatcasecmp
 */
function natcaseksort( &$array ) {
    uksort( $array, 'strnatcasecmp' );
}

測試無誤,好用簡潔。用法:

natksort($arr);   // =ksort($arr, SORT_NATURAL);

natcaseksort($arr);  // =ksort($arr, SORT_NATURAL | SORT_FLAG_CASE);

延伸閱讀

[PHP] 陣列排序 sort, ksort, asort, usort...@新精讚

參考資料

[1] PHP function "sort" manual
[2] http://cordyshtml5.googlecode.com/svn-history/r248/branches/buildsdk/testswarm/inc/utilities.php

 

END

你可能感興趣的文章

[phpmyadmin] 設定預設語言(Language) phpmyadmin預設進來是會選擇你瀏覽器預設的語系,改成正體中文

PHP程式經驗 #2 -- print和echo的差異 常在寫php的人一定會想知道echo和print這兩個函數有什麼不一樣 驗證 1. 比較print 和echo 函式的執

[PHP>7.3] switch中的 Did you mean to use "continue 2"? 除錯 這近更新 PHP到7.3版以後,出現這樣的錯:targeting switch is equivalent to "break". Did you mean to use "continue 2"?解決方法

[PHP] 判斷文字、數字、文字加數字的方法 幾個PHP數字和文字操作上的小眉角:判斷文字、數字、文字加數字的方法

[PHP] 移除檔案的UTF8 BOM 移除檔案的UTF8 BOM

[PHP] 陣列排序 sort, ksort, asort, usort... 簡單的記錄PHP的陣列排序,因為常常會用到。

隨機好文

[jQuery] textarea 的取值和給值 HTML 的 TEXTAREA 標籤若要用 jquery 取值,不能使用 .text() 或 .html() ,使用 .

[jQuery] select 元件的取值及給值 html中的元件select,在jquery中要如何使用?

[HP DL380G7] 生效啟動第3,4片網卡/開啟或關閉內建的網卡 HP DL380G7 預設第3,4片網卡裝完系統後找不到,難道是壞了?要怎麼辦?

外匯課程經驗 有天遇到某個朋友的正妹朋友,說她有個很棒的外匯投資課程,要我們去聽,只收場地費200大洋。她又說續效最差一個月也有1%,誰還在苦哈哈上班?

[MYSQL] 設定字串欄位的預設值 新增表格的時候,字串欄位給予預設空值;數字欄位給預設數值;日期欄位給空值。