首页 > 解决方案 > 在不知道每个键的情况下对嵌套的关联数组进行排序

问题描述

我想按数字对嵌套数组进行排序。因此,在每个类别中,数量最多的产品排在第一位。

我尝试了我在这里找到的东西。 如何按值对多维数组进行排序?

usort($myArray, function($a, $b) {
    $retval = $a['order'] <=> $b['order'];
    if ($retval == 0) {
        $retval = $a['suborder'] <=> $b['suborder'];
        if ($retval == 0) {
            $retval = $a['details']['subsuborder'] <=> $b['details']['subsuborder'];
        }
    }
    return $retval;
});

但没有找到使其工作的解决方案。特别是因为我不知道一个类别中的每个产品编号(egsdk38z3)(例如巧克力 - 糖 - 糖果)。在我的情况下,我使用 uasort 而不是 usort。

Array
(
    [apple - oranges - bananas] => Array
        (
            [fn7z3] => Array
                (
                    [slider_details] =>
                    [productnumber] => fn7z3
                    [category] => 
                    [title] => 
                    [text] => 
                    [picture] => 
                    [number] => 30
                    [oneString] =>
                )

        )

    [chocholate - sugar - candy] => Array
        (
            [sdk38z3] => Array
                (
                    [slider_details] =>
                    [productnumber] => sdk38z3
                    [category] => 
                    [title] => 
                    [text] => 
                    [picture] => 
                    [number] => 45
                    [oneString] => 
                )

            [g433] => Array
                (
                    [slider_details] =>
                    [productnumber] => g433
                    [category] => 
                    [title] => 
                    [text] => 
                    [picture] => 
                    [number] => 2
                    [oneString] =>
                )

            [j8z28] => Array
                (
                    [slider_details] =>
                    [productnumber] => j8z28
                    [category] => 
                    [title] => 
                    [text] => 
                    [picture] => 
                    [number] => 250
                    [oneString] =>
                )

            [73hf873] => Array
                (
                    [slider_details] => 
                    [productnumber] => 73hf873
                    [category] => 
                    [title] => 
                    [text] => 
                    [picture] =>
                    [number] => 30
                    [oneString] => 
                )

        )

我想要的结果:

Array
(
    [apple - oranges - bananas] => Array
        (
            [fn7z3] => Array
                (
                    [slider_details] =>
                    [productnumber] => fn7z3
                    [category] => 
                    [title] => 
                    [text] => 
                    [picture] => 
                    [number] => 30
                    [oneString] =>
                )

        )

    [chocholate - sugar - candy] => Array
        (
            [j8z28] => Array
                (
                    [slider_details] =>
                    [productnumber] => j8z28
                    [category] => 
                    [title] => 
                    [text] => 
                    [picture] => 
                    [number] => 250
                    [oneString] =>
                )
            [sdk38z3] => Array
                (
                    [slider_details] =>
                    [productnumber] => sdk38z3
                    [category] => 
                    [title] => 
                    [text] => 
                    [picture] => 
                    [number] => 45
                    [oneString] => 
                )

            [73hf873] => Array
                (
                    [slider_details] => 
                    [productnumber] => 73hf873
                    [category] => 
                    [title] => 
                    [text] => 
                    [picture] =>
                    [number] => 30
                    [oneString] => 
                )

            [g433] => Array
                (
                    [slider_details] =>
                    [productnumber] => g433
                    [category] => 
                    [title] => 
                    [text] => 
                    [picture] => 
                    [number] => 2
                    [oneString] =>
                )
        )

标签: phparrayssortingmultidimensional-array

解决方案


我终于找到了解决我的问题的方法,方法是使用这个答案中给出的函数: How to sort an array of associative arrays by value of a given key in PHP?

因为我真的不知道我需要的密钥,所以我使用了带有 $key 功能的 foreach 循环。

我还需要用排序后的数组覆盖我的实际数组,以使更改永久化。就我而言,正如我所说,我使用 uasort 而不是 usort,因为我使用名称作为键。

变量说明:

$similarProducts = 我的整个数组。

$attributeCombination = 例如 [苹果 - 橙子 - 香蕉]

function invenDescSort($item1, $item2)
{
    if ($item1['number'] == $item2['number']) return 0;
    return ($item1['number'] < $item2['number']) ? 1 : -1;
}

foreach ($similarProducts AS $key => $attributeCombination) {

    uasort($attributeCombination, 'invenDescSort');
    $this->similarProducts[$key] = $attributeCombination;
    //print_r($attributeCombination);

}

推荐阅读