如何根据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);
答案 0 :(得分:1)
您可以使用 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;
}
});
<强> THE DEMO. 强>
答案 1 :(得分:1)
简单地使用array_merge
似乎有效:
ksort($toBeSorted);
print_r(array_merge(array_flip($sortByThis), $toBeSorted));
输出:
Array
(
[username] => Username
[id] => Identifier
[email] => E-mail
[phone] => Phone number
)
链接到codepad
答案 2 :(得分:0)
查看array_multisort()函数。 http://php.net/manual/en/function.array-multisort.php
你可以通过这样做来实现这一点。
$sorted_arr= array_multisort($toBeSorted, array('username'=>SORT_ASC, 'id'=>SORT_ASC));
如果这对您没有帮助,则用户提交了其他功能。