多维数组排序

问题描述 投票:0回答:4

我有以下数组,我想按值对数组进行排序。

(
    [bwin] => Array
        (
            [0] => Array
                (
                    [bookie] => bwin
                    [id_bookie] => 178537
                    [value] => 6.00
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 1
                )

            [1] => Array
                (
                    [bookie] => bwin
                    [id_bookie] => 178537
                    [value] => 1.45
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 2
                )

            [2] => Array
                (
                    [bookie] => bwin
                    [id_bookie] => 178537
                    [value] => 4.50
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => x
                )

        )

    [NordicBet] => Array
        (
            [0] => Array
                (
                    [bookie] => NordicBet
                    [id_bookie] => 201581
                    [value] => 5.75
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 1
                )

            [1] => Array
                (
                    [bookie] => NordicBet
                    [id_bookie] => 201581
                    [value] => 1.50
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 2
                )

            [2] => Array
                (
                    [bookie] => NordicBet
                    [id_bookie] => 201581
                    [value] => 4.30
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => x
                )

        )

    [Canbet] => Array
        (
            [0] => Array
                (
                    [bookie] => Canbet
                    [id_bookie] => 176582
                    [value] => 5.60
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 1
                )

            [1] => Array
                (
                    [bookie] => Canbet
                    [id_bookie] => 176582
                    [value] => 1.56
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 2
                )

            [2] => Array
                (
                    [bookie] => Canbet
                    [id_bookie] => 176582
                    [value] => 3.80
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => x
                )

        )

    [Expekt] => Array
        (
            [0] => Array
                (
                    [bookie] => Expekt
                    [id_bookie] => 235615
                    [value] => 5.60
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 1
                )

            [1] => Array
                (
                    [bookie] => Expekt
                    [id_bookie] => 235615
                    [value] => 1.50
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 2
                )

            [2] => Array
                (
                    [bookie] => Expekt
                    [id_bookie] => 235615
                    [value] => 4.25
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => x
                )

        )

    [StanJames] => Array
        (
            [0] => Array
                (
                    [bookie] => StanJames
                    [id_bookie] => 243649
                    [value] => 5.50
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 1
                )

            [1] => Array
                (
                    [bookie] => StanJames
                    [id_bookie] => 243649
                    [value] => 1.53
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 2
                )

            [2] => Array
                (
                    [bookie] => StanJames
                    [id_bookie] => 243649
                    [value] => 4.00
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => x
                )

        )

    [Gamebookers] => Array
        (
            [0] => Array
                (
                    [bookie] => Gamebookers
                    [id_bookie] => 203620
                    [value] => 5.00
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 1
                )

            [1] => Array
                (
                    [bookie] => Gamebookers
                    [id_bookie] => 203620
                    [value] => 1.50
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 2
                )

            [2] => Array
                (
                    [bookie] => Gamebookers
                    [id_bookie] => 203620
                    [value] => 4.25
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => x
                )

        )

    [Tipp3] => Array
        (
            [0] => Array
                (
                    [bookie] => Tipp3
                    [id_bookie] => 292604
                    [value] => 4.10
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 1
                )

            [1] => Array
                (
                    [bookie] => Tipp3
                    [id_bookie] => 292604
                    [value] => 1.50
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => 2
                )

            [2] => Array
                (
                    [bookie] => Tipp3
                    [id_bookie] => 292604
                    [value] => 3.40
                    [bettype] => 3way
                    [line] => 0.0
                    [bet] => x
                )

        )

)

这是未排序的数组输出,但我想对行为2的数组进行排序,但行会改变,有时我必须对行为x或1的位置进行排序。

enter image description here

php sorting multidimensional-array
4个回答
1
投票

您可以使用

usort
。这是一个小片段。您可以在这个功能中做很多您想做的事情。

function sorting_function($x, $y)
{
    if ($x['value'] == $y['value'])
        return 0;
    else if ($x['value'] < $y['value'])
        return -1;
    else
        return 1;
}

usort($table_array, 'sorting_function');

0
投票

PHP 在处理多维数组方面相当粗糙。在 php

sort
function 页面的评论中有很多解决方案,将它们全部发布在这里是相当多余的......通读它们,尝试其中的一些,看看你喜欢哪一个。


0
投票

该数据看起来是制表符分隔的。如果是,则根据制表符分割每一行并将其存储在数组中。从那里开始,扔掉空单元格就很简单了。自定义排序函数接受这些数组的数组,以及要排序的列的 int(表示列号的索引)也应该很容易从那里完成。


0
投票

迭代集合并通过引用修改行。
调用

usort()
value
列值对子集进行排序。

代码:(演示

foreach ($array as &$row) {
    usort($row, fn($a, $b) => $b['value'] <=> $a['value']);
}
var_export($array);
© www.soinside.com 2019 - 2024. All rights reserved.