How to use usort inside a multidimensional array?

Jérôme

I have this multidimensional array

[
    "/api/dns" => [
        0 => [
            "method" => "GET",
            "uri" => "foo0"
        ],
        1 => [
            "method" => "GET",
            "uri" => "foo1"
        ],
        2 => [
            "method" => "GET",
            "uri" => "foo2"
        ]
    ],
    "/api/servers" => [
        0 => [
            "method" => "GET",
            "uri" => "foo0"
        ],
        1 => [
            "method" => "GET",
            "uri" => "foo1"
        ],
        2 => [
            "method" => "GET",
            "uri" => "foo2"
        ]
    ]
];

I'm trying to sort by uri.

I tried with usort like this:

usort($myArray, function ($a, $b) {
   return $a['uri'] - $b['uri'];
});

But this is not working because the sort is not done on right array so I got the error:

Undefined index: uri

I tried to add this function in a foreach without result. I don't know why this is not working because the sort is done on the right array.

foreach ($myArray as $key) {
    usort($key, function ($a, $b) {
        return $a['uri'] - $b['uri'];
    });
}

Is this possible with usort?

How can I sort by uri with my usort function?

mickmackusa

As you loop through your first level, modify the subarrays "by reference" with the & symbol.

Code: (Demo: https://3v4l.org/DthZW )

foreach($myArray as &$subarray){  // modify by reference
    usort($subarray,function($a,$b){
        return $a['uri']<=>$b['uri'];  // use spaceship operator for ASC sorting 
    });
}
var_export($myArray);

If you don't want to use &, then you can overwrite as you iterate.

foreach ($myArray as $key=>$subarray){
    usort($subarray,function($a,$b){
        return $a['uri']<=>$b['uri'];
    });
    $myArray[$key]=$subarray;  // overwrite
}

Alternatively, you can combine array_multisort() with array_column():

Code: ( Demo: https://3v4l.org/sOEqZ )

foreach($myArray as &$subarray){
    array_multisort(array_column($subarray,'uri'),$subarray);
}
var_export($myArray);

And again, you can perform iterated overwrites with this as well.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

usort() Multidimensional array with PHP

From Dev

Notation for sorting multidimensional array with usort

From Dev

Notation for sorting multidimensional array with usort

From Dev

php how to use multidimensional array

From Dev

How to delete an element inside a multidimensional array in PHP?

From Dev

How to delete an element inside a multidimensional array in PHP?

From Dev

PHP Multidimensional array merge two trees inside an array How to?

From Dev

How to check whether array key is present inside multidimensional array in php

From Dev

How to use multidimensional array in ajax json?

From Dev

How to use array_search or in_array function on a multidimensional array

From Dev

PHP: how to use usort with anonymous function?

From Dev

PHP: how to use usort with anonymous function?

From Dev

How can I replace a string inside a multidimensional array?

From Dev

How to find value inside multidimensional array without looping?

From Dev

How can I replace a string inside a multidimensional array?

From Dev

Javascript how to deep clone a multidimensional array having object inside it?

From Dev

Use multidimensional array in OptionsResolver

From Dev

Use of multidimensional array

From Dev

How to use preg_replace on multidimensional array and with a multidimensional array as source for the replacment

From Dev

PHP custom sort function of multidimensional array because of usort members equality problem

From Dev

How to use FILTER on a multidimensional array to retrieve unique values?

From Dev

Get most frequent array inside a multidimensional array

From Dev

Javascript array inside of another array (multidimensional)

From Dev

Find Array With 'SELECTED' Value Inside Multidimensional Array

From Dev

Rails - Using .uniq on an array inside a multidimensional array

From Dev

Get most frequent array inside a multidimensional array

From Dev

How to filter this multidimensional array?

From Dev

How to sort multidimensional array

From Dev

How to Group a multidimensional array

Related Related

  1. 1

    usort() Multidimensional array with PHP

  2. 2

    Notation for sorting multidimensional array with usort

  3. 3

    Notation for sorting multidimensional array with usort

  4. 4

    php how to use multidimensional array

  5. 5

    How to delete an element inside a multidimensional array in PHP?

  6. 6

    How to delete an element inside a multidimensional array in PHP?

  7. 7

    PHP Multidimensional array merge two trees inside an array How to?

  8. 8

    How to check whether array key is present inside multidimensional array in php

  9. 9

    How to use multidimensional array in ajax json?

  10. 10

    How to use array_search or in_array function on a multidimensional array

  11. 11

    PHP: how to use usort with anonymous function?

  12. 12

    PHP: how to use usort with anonymous function?

  13. 13

    How can I replace a string inside a multidimensional array?

  14. 14

    How to find value inside multidimensional array without looping?

  15. 15

    How can I replace a string inside a multidimensional array?

  16. 16

    Javascript how to deep clone a multidimensional array having object inside it?

  17. 17

    Use multidimensional array in OptionsResolver

  18. 18

    Use of multidimensional array

  19. 19

    How to use preg_replace on multidimensional array and with a multidimensional array as source for the replacment

  20. 20

    PHP custom sort function of multidimensional array because of usort members equality problem

  21. 21

    How to use FILTER on a multidimensional array to retrieve unique values?

  22. 22

    Get most frequent array inside a multidimensional array

  23. 23

    Javascript array inside of another array (multidimensional)

  24. 24

    Find Array With 'SELECTED' Value Inside Multidimensional Array

  25. 25

    Rails - Using .uniq on an array inside a multidimensional array

  26. 26

    Get most frequent array inside a multidimensional array

  27. 27

    How to filter this multidimensional array?

  28. 28

    How to sort multidimensional array

  29. 29

    How to Group a multidimensional array

HotTag

Archive