[英]Sorting alphabetically by Array Value in Multidimensional Indexed Array After Custom Sort (usort) / Sort Array by Two Values
原始數組:
[0] => Array
(
[name] => Light Amethyst
[description] => color
)
[1] => Array
(
[name] => Stone
[description] => base material
)
[2] => Array
(
[name] => Emerald
[description] => color
)
[3] => Array
(
[name] => Brass
[description] => base material
)
應用usort($terms, "mysort");
通過以下功能
function getSortOrder($c) {
$sortOrder = array(
"base material",
"color"
);
$pos = array_search($c['description'], $sortOrder);
return $pos !== false ? $pos : 99999;
}
function mysort($a, $b) {
if( getSortOrder($a) < getSortOrder($b) ) {
return -1;
}elseif( getSortOrder($a) == getSortOrder($b) ) {
return 0;
}else {
return 1;
}
}
這樣就成功通過getSortOrder
function 中的$sortOrder
數組對數組進行排序(先有底材,后有顏色)
[0] => Array
(
[name] => Stone
[description] => base material
)
[1] => Array
(
[name] => Brass
[description] => base material
)
[2] => Array
(
[name] => Light Amethyst
[description] => color
)
[3] => Array
(
[name] => Emerald
[description] => color
)
現在我正在嘗試按name
對這個新的排序數組進行排序,同時保持先前應用的排序順序(首先是基礎材料,然后是顏色)。
預期 Output:
[0] => Array
(
[name] => Brass
[description] => base material
)
[1] => Array
(
[name] => Stone
[description] => base material
)
[2] => Array
(
[name] => Emerald
[description] => color
)
[3] => Array
(
[name] => Light Amethyst
[description] => color
)
通常我可以像這樣應用一個usort
function :
usort($people,"sort_name");
function sort_name($a,$b)
{
return $a["name"] > $b["name"];
}
但這當然會弄亂原始description
排序的 output。
我怎樣才能像上面的函數一樣先按description
排序,然后在保持description
排序的同時繼續按name
排序?
您可以使用array_multisort將一個 go 中的原始數據排序為預期的 output (先按描述排序,然后按名稱排序),如下所示
$data = [
['name' => 'Light Amethyst', 'description' => 'color'],
['name' => 'Stone', 'description' => 'base material'],
['name' => 'Emerald', 'description' => 'color'],
['name' => 'Brass', 'description' => 'base material']
];
array_multisort(array_column($data, 'description'), SORT_ASC, array_column($data, 'name'), SORT_ASC, $data);
$data
現在將首先按description
排序,然后按name
排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.