Php 如何对多维数组进行排序?
我正在跟踪我的产品描述中出现了多少单词,并创建了一个多维数组来跟踪这些单词,但我需要按找到最多的关键字到最低的关键字进行排序。我有这个数组,我希望能够按“count”键对其进行排序: 因此,结果如下所示:Php 如何对多维数组进行排序?,php,sorting,multidimensional-array,Php,Sorting,Multidimensional Array,我正在跟踪我的产品描述中出现了多少单词,并创建了一个多维数组来跟踪这些单词,但我需要按找到最多的关键字到最低的关键字进行排序。我有这个数组,我希望能够按“count”键对其进行排序: 因此,结果如下所示: Array ( [KOM1-K182871HK] => Array ( [count] => 3 [words] => Array ( [4] => cotton
Array
(
[KOM1-K182871HK] => Array
(
[count] => 3
[words] => Array
(
[4] => cotton
[5] => nylon
[6] => blue
)
)
[PVH1-U2666001] => Array
(
[count] => 2
[words] => Array
(
[2] => cotton
[5] => briefs
)
)
[KOM1-K182924DA] => Array
(
[count] => 1
[words] => Array
(
[4] => cotton
)
)
[GEO2-K2345TF] => Array
(
[count] => 1
[words] => Array
(
[4] => red
)
)
)
我该怎么做?我尝试了在stackoverflow上找到的多种解决方案,但没有一种对我有效。我已经在这里试过了。我使用的是PHP 5.6,所以我尝试了以下方法:
usort($myArray, function($a, $b) {
return $a['order'] - $b['order'];
});
但它不返回数组,而是返回“sku”和数字。您可以使用或
工作解决方案:
function sortBySubValue($array, $value, $asc = true, $preserveKeys = false)
{
if ($preserveKeys) {
$c = array();
if (is_object(reset($array))) {
foreach ($array as $k => $v) {
$b[$k] = strtolower($v->$value);
}
} else {
foreach ($array as $k => $v) {
$b[$k] = strtolower($v[$value]);
}
}
$asc ? asort($b) : arsort($b);
foreach ($b as $k => $v) {
$c[$k] = $array[$k];
}
$array = $c;
} else {
if (is_object(reset($array))) {
usort($array, function ($a, $b) use ($value, $asc) {
return $a->{$value} == $b->{$value} ? 0 : ($a->{$value} - $b->{$value}) * ($asc ? 1 : -1);
});
} else {
usort($array, function ($a, $b) use ($value, $asc) {
return $a[$value] == $b[$value] ? 0 : ($a[$value] - $b[$value]) * ($asc ? 1 : -1);
});
}
}
return $array;
}
sortBySubValue($array, 'count', false, true);
将
count
列提取到单个维度中,按降序排序,并按以下顺序对原始数组排序:
array_multisort(array_column($myArray, 'count'), SORT_DESC, $myArray);
这应该是一个评论,因为你实际上没有关于如何做的描述,这不是一个真正有效的答案。这个问题也是重复的。在usort页面上的例子2 Kumar linked与这个问题非常接近,它可以回答它。@jh1711这不是问题所在。问题是1。简单链接答案无效(自动检测并出现在管理员问题审核队列中)和2。一个已经在网站上被问过和回答过多次的问题应该被关闭,而不是下次再回答。@Sebas,我不是有意不同意格鲁比克劳顿的评论。我只是想把altoids指向手册的正确部分。“但我应该换一种说法,”格鲁比克劳顿说,“我以前尝试过这个解决方案,但它不起作用。我使用的是5.6版,但它返回带有数字的sku。它没有返回一个array@altoids我粘贴的解决方案与您的问题中的预期效果一样。我发现我的错误,我在做$myArray=usort(…);但我不想将usort的响应分配给$myArray。@altoids顺便说一句,如果您发现我的解决方案有效,并且符合您的要求,那么您可以接受这个。
array_multisort(array_column($myArray, 'count'), SORT_DESC, $myArray);