Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何对多维数组进行排序?_Php_Sorting_Multidimensional Array - Fatal编程技术网

Php 如何对多维数组进行排序?

Php 如何对多维数组进行排序?,php,sorting,multidimensional-array,Php,Sorting,Multidimensional Array,我正在跟踪我的产品描述中出现了多少单词,并创建了一个多维数组来跟踪这些单词,但我需要按找到最多的关键字到最低的关键字进行排序。我有这个数组,我希望能够按“count”键对其进行排序: 因此,结果如下所示: Array ( [KOM1-K182871HK] => Array ( [count] => 3 [words] => Array ( [4] => cotton

我正在跟踪我的产品描述中出现了多少单词,并创建了一个多维数组来跟踪这些单词,但我需要按找到最多的关键字到最低的关键字进行排序。我有这个数组,我希望能够按“count”键对其进行排序:

因此,结果如下所示:

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);