簡體   English   中英

使用 array_multisort() 不區分大小寫對多維 PHP 數組進行排序

[英]Case Insensitively Sort a Multidimensional PHP Array using array_multisort()

經過大量搜索,我一直無法找到關於如何使用 array_multisort() 對多維數組按一個字段進行不區分大小寫排序的很好解釋。 在處理來自數據庫查詢的信息時,我發現這是一個非常有用的功能,所以我想分享一下。

我應該注意這僅適用於 php 5.4+

# Example results from database
$PDOresult = array(
    array('name' => 'Alpha', 'price' => '10'),
    array('name' => 'beta', 'price' => '12'),
    array('name' => 'Gamma', 'price' => '14'),
    array('name' => 'delta', 'price' => '16'),
    array('name' => 'Epsilon', 'price' => '18'),
    array('name' => 'zeta', 'price' => '20'),
    ...
);

# Create array of field to sort by - 'name' in this example
foreach ($PDOresult as $key => $row) {
    $sort_by[$key] = $row['name'];
}

# Sort array - The flags SORT_NATURAL & SORT_FLAG_CASE are required to make the
# sorting case insensitive.
array_multisort($sort_by, SORT_ASC, SORT_NATURAL|SORT_FLAG_CASE, $PDOresult);

# Output
var_dump($PDOresult);

如果使用 php 5.5+,您可以跳過foreach()並使用array_column()代替。 像這樣:

$sort_by = array_column($PDOresult, 'name');

我很想將其編輯為寫得很好的答案: 如何在 PHP 中對數組和數據進行排序? 但我不想搞砸格式,所以如果有人想這樣做並關閉它,那對我來說沒問題。

@damndaewoo

SORT_ASC|SORT_NATURAL|SORT_FLAG_CASE

在某些情況下會給你:

Warning: array_multisort(): Argument #2 is an unknown sort flag 

正如此處的文檔所說您應該使用“,”而不是“|” 但是您不能執行以下操作:

SORT_ASC,SORT_NATURAL,SORT_FLAG_CASE因為你會得到一個意想不到的:

Argument #4 is expected to be an array or sorting flag that has not already been specified

相反,您將按如下方式使用這兩種技術:

array_multisort($sort_by, SORT_ASC,SORT_NATURAL|SORT_FLAG_CASE, $PDOresult);

你也可以簡單地這樣做:

foreach ($PDOresult as $key => $row) {
    $sort_by[$key] = strtolower($row['name']);
}

array_multisort($sort_by, SORT_ASC, $PDOresult);

不需要特殊標志,因為排序的所有內容都是小寫的。 如果您擔心 UTF-8,請改用 mb_strtolower()。 這將與具有特殊標志的解決方案具有相同的結果,但在我看來更直觀。

暫無
暫無

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

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