当键包含整数和字符串组合时,php数组multisort未返回正确的结果

当键包含整数和字符串组合时,php数组multisort未返回正确的结果,php,arrays,array-multisort,Php,Arrays,Array Multisort,我想按键的升序和值的降序对数组进行排序 下面是我排序前的数组 [undefined] => 166 [template] => 2 [indesign] => 1 [product] => 1 [2] => 3 [4] => 3 [66] => 2 [34] => 1 [2222] => 1 我使用下面的代码进行排序 array_multisort(array_values($data), SORT_DESC, array_keys($d

我想按键的升序和值的降序对数组进行排序

下面是我排序前的数组

[undefined] => 166
[template] => 2
[indesign] => 1
[product] => 1
[2] => 3
[4] => 3
[66] => 2
[34] => 1
[2222] => 1
我使用下面的代码进行排序

 array_multisort(array_values($data), SORT_DESC, array_keys($data), SORT_ASC, $data);
这里是排序后的输出

   [undefined] => 166
    [0] => 3
    [1] => 3
    [template] => 2
    [2] => 2
    [indesign] => 1
    [product] => 1
    [3] => 1
    [4] => 1
包含整数的键已更改,如何克服此问题?

代码:

$keys = array_keys($array);
$values = array_values($array);

array_multisort($values, SORT_DESC, $keys, SORT_ASC | SORT_NATURAL);

$result = array_combine($keys, $values);
输出:

Array
(
    [undefined] => 166
    [2] => 3
    [4] => 3
    [66] => 2
    [template] => 2
    [34] => 1
    [2222] => 1
    [indesign] => 1
    [product] => 1
)

首先是按值排序,而不是按键排序。交换参数。也看看排序_NATURAL@AbraCadaver,抽绳不起作用。natsort支持同时使用键和值进行排序吗?您说您希望键降序,然后值升序,但您将它们向后排列,然后您需要对键进行排序| ASC | SORT | NATURAL。正确答案为向上投票。我认为,如果你解释OP为什么他的代码不起作用,这可能会更好,甚至可能会添加到array_multisort documantation的链接……而且,它们说明键的升序和值的降序,所以键应该是第一位的。@Abracadver,无法确认你的想法。问题末尾的示例输出正好相反。它看起来像谷歌的OP,但没有阅读评论。