[英]How to sort an array based on the values of another (partial) array in PHP?
如何根據 PHP 中另一個(部分)數組的值對數組進行排序? 即$toBeSorted
是目標數組, $sortByThis
提供鍵(不是所有鍵!):
// Array to be sorted (mantaining key-values correlations)
$toBeSorted = array(
'id' => 'Identifier',
'username' => 'Username',
'phone' => 'Phone number',
'email' => 'E-mail',
);
$sortByThis = array('username', 'id');
// Result should be username, id, email, phone
// The remaining portion of array should be sorted with ksort()
我記得(但我不是 100% 確定)一個可以快速執行此操作的函數。 其實我用過:
// Sort the first portion of the array
$sorted = array_intersect_key($toBeSorted, array_flip($sortByThis));
// Sort the remaining portion
$remain = array_diff_key($toBeSorted, $sorted);
ksort($remain);
$toBeSorted = array_merge($sorted, $remain);
你可以使用uksort來組合。
uksort($toBeSorted, function($a, $b) use ($sortByThis) {
$key_a = array_search($a, $sortByThis);
$key_b = array_search($b, $sortByThis);
if ($key_a === false && $key_b === false) {
return strcmp($a, $b);
} else if ($key_a === false) {
return 1;
} else if ($key_b === false) {
return -1;
} else {
return $key_a - $key_b;
}
});
簡單地使用array_merge
似乎工作:
ksort($toBeSorted);
print_r(array_merge(array_flip($sortByThis), $toBeSorted));
輸出:
Array
(
[username] => Username
[id] => Identifier
[email] => E-mail
[phone] => Phone number
)
鏈接到鍵盤
看看 array_multisort() 函數。 http://php.net/manual/en/function.array-multisort.php
你可以通過做這樣的事情來實現這一點。
$sorted_arr= array_multisort($toBeSorted, array('username'=>SORT_ASC, 'id'=>SORT_ASC));
如果這對您沒有幫助,還有用戶提交的其他功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.