[英]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.