簡體   English   中英

帶有特殊字符的 PHP 排序數組

[英]PHP sort array with special characters

我知道這被問了很多次,但我仍然找不到防彈解決方案。

這是我的數組,需要按字母順序排序。

setlocale(LC_ALL, 'sl_SI.utf8');

$a = [
   'č' => [...],  
   'a' => [...],
   'š' => [...], 
   'u' => [...] 
]

如何按鍵排序?

從這個例子中獲取參考: -在 PHP 中使用特殊字符對數組進行排序

解釋:-

  1. 使用array_keys()方法獲取數組鍵

  2. 基於iconv()strcmp()函數的排序鍵

  3. 迭代排序的鍵數組並從初始數組中獲取它們對應的值。將此鍵值對保存到結果數組中

像下面這樣:-

<?php

setlocale(LC_ALL, 'sl_SI.utf8');

$a = [
   'č' => [12],  
   'a' => [23],
   'š' => [45], 
   'u' => [56] 
];


$index_array = array_keys($a);

function compareASCII($a, $b) {
    $at = iconv('UTF-8', 'ASCII//TRANSLIT', $a);
    $bt = iconv('UTF-8', 'ASCII//TRANSLIT', $b);
    return strcmp($at, $bt);
}

uasort($index_array, 'compareASCII');

$final_array = [];
foreach($index_array as $index_arr){

$final_array[$index_arr] = $a[$index_arr];
}

print_r($final_array);

輸出:- https://eval.in/990872

參考:-

iconv()

strcmp()

使用strcoll()

setlocale(LC_ALL, 'sl_SI.utf8');
// setlocale(LC_ALL,"cs_CZ.UTF-8"); //for Czech characters etc.
uksort($a, 'strcoll');

您可以使用 usort 以這種方式按值對多維數組進行排序:

 setlocale(LC_ALL, 'sl_SI.utf8');
 // setlocale(LC_ALL,"cs_CZ.UTF-8"); //for Czech characters etc.
 usort($posts, function($a, $b) {
    return strcoll($a["post_title"], $b["post_title"]);
 });

或對於對象:

 setlocale(LC_ALL, 'sl_SI.utf8');
 // setlocale(LC_ALL,"cs_CZ.UTF-8"); //for Czech characters etc.
 usort($posts, function($a, $b) {
    return strcoll($a->post_title, $b->post_title);
 });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM