Search code examples
phparrayssortingmultidimensional-array

Sort each subarray of a multidimensional array by a column value


I have the following array and I want to sort the subarrays by value.

[
    'bwin' => [
        ['bookie' => 'bwin', 'id_bookie' => 178537, 'value' => 6.00, 'bet' => 1],
        ['bookie' => 'bwin', 'id_bookie' => 178537, 'value' => 1.45, 'bet' => 2],
        ['bookie' => 'bwin', 'id_bookie' => 178537, 'value' => 4.50, 'bet' => 'x']
    ],
    'NordicBet' => [
        ['bookie' => 'NordicBet', 'id_bookie' => 201581, 'value' => 5.75, 'bet' => 1],
        ['bookie' => 'NordicBet', 'id_bookie' => 201581, 'value' => 1.50, 'bet' => 2],
        ['bookie' => 'NordicBet', 'id_bookie' => 201581, 'value' => 4.30, 'bet' => 'x']
    ],
    'Canbet' => [
        ['bookie' => 'Canbet', 'id_bookie' => 176582, 'value' => 5.60, 'bet' => 1],
        ['bookie' => 'Canbet', 'id_bookie' => 176582, 'value' => 1.56, 'bet' => 2],
        ['bookie' => 'Canbet', 'id_bookie' => 176582, 'value' => 3.80, 'bet' => 'x']
    ],
    'Expekt' => [
        ['bookie' => 'Expekt', 'id_bookie' => 235615, 'value' => 5.60, 'bet' => 1],
        ['bookie' => 'Expekt', 'id_bookie' => 235615, 'value' => 1.50, 'bet' => 2],
        ['bookie' => 'Expekt', 'id_bookie' => 235615, 'value' => 4.25, 'bet' => 'x']
    ],
    'StanJames' => [
        ['bookie' => 'StanJames', 'id_bookie' => 243649, 'value' => 5.50, 'bet' => 1],
        ['bookie' => 'StanJames', 'id_bookie' => 243649, 'value' => 1.53, 'bet' => 2],
        ['bookie' => 'StanJames', 'id_bookie' => 243649, 'value' => 4.00, 'bet' => 'x']
    ],
    'Gamebookers' => [
        ['bookie' => 'Gamebookers', 'id_bookie' => 203620, 'value' => 5.00, 'bet' => 1],
        ['bookie' => 'Gamebookers', 'id_bookie' => 203620, 'value' => 1.50, 'bet' => 2],
        ['bookie' => 'Gamebookers', 'id_bookie' => 203620, 'value' => 4.25, 'bet' => 'x']
    ],
    'Tipp3' => [
        ['bookie' => 'Tipp3', 'id_bookie' => 292604, 'value' => 4.10, 'bet' => 1],
        ['bookie' => 'Tipp3', 'id_bookie' => 292604, 'value' => 1.50, 'bet' => 2],
        ['bookie' => 'Tipp3', 'id_bookie' => 292604, 'value' => 3.40, 'bet' => 'x']
    ]
];

This is the unsorted array output, but I want to sort the array where the line is 2, but the line will be changing, sometimes I have to sort where the line is x or 1.

enter image description here


Solution

  • You can use usort. Here's a small snippet. You can do pretty much want you want in this function.

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