[精讚] [會員登入]
3461

[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

你可能感興趣的文章

PHP 產生連續的日期 要用PHP產生連續的日期,連續月份

PHP程式經驗 #1 -- 靜態的物件比動態物件快 驗證 1. 使用動態物件函式 > 使用靜態物件函式。 2. 使用有宣告的靜態物件函式 > 使用動態無宣告的靜

使用strcmp來判斷日期是否介於某日期之間 要比較現在日期是否在兩個日期之間,使用字串比對的方法

[PHP] 檢查檔案是否是圖檔 使用getimagesize函數檢查檔案是否是圖檔

[phpmyadmin] 錯誤:您應升級到 MySQL 5.5.0 或更新版本 使用phpmyadmin4出現錯誤:您應升級到 MySQL 5.5.0 或更新版本的解決方式

[PHP] 字串拆解函數substr 奇異的錯誤(札記) 偶然發現一個 substr函數拆解上的怪異之處

隨機好文

[jQuery] 利用load()來達成ajax的寫法 jQuery中利用load()來達成ajax的寫法,也有人稱他是假的ajax,作法就是..

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

如何在linux下執行java 原生的java應用程式可以使用簡單的方法在console下面寫出來,適合作簡單的應用

SELinux 常用指令和檔案 在Redhat系列中,Centos5以後加入了selinux,他並沒有這麼可怕,不必每次看到Selinux ,就想把他

世紀帝國征服者新版本--被遺忘的帝國 世紀帝國征服者新版本--被遺忘的帝國 世紀二代的征服者是精典遊戲中的精典,aofe更好玩...