Arsort массив, когда некоторые значения сами являются массивами

У меня есть массив, который выглядит так:

array(5) {
 ["title"]=>
 string(22) "http://example.com/288"
 ["title2"]=>
 string(22) "http://example.com/290"
 ["title3"]=>
 string(22) "http://example.com/284"
 ["title4"]=>
 array(2) {
 [0]=>
 string(22) "http://example.com/275"
 [1]=>
 string(22) "http://example.com/274"
 }
 ["title5"]=>
 array(2) {
 [0]=>
 string(22) "http://example.com/292"
 [1]=>
 string(22) "http://example.com/291"
 }
}

Я хочу, чтобы arsort массивы, которые работают просто отлично, пока мое значение не является массивом в себе. if я arsort($array); он дает следующее:

array(5) {
 ["title5"]=>
 array(2) {
 [0]=>
 string(22) "http://example.com/292"
 [1]=>
 string(22) "http://example.com/291"
 }
 ["title4"]=>
 array(2) {
 [0]=>
 string(22) "http://example.com/275"
 [1]=>
 string(22) "http://example.com/274"
 }
 ["title2"]=>
 string(22) "http://example.com/290"
 ["title"]=>
 string(22) "http://example.com/288"
 ["title3"]=>
 string(22) "http://example.com/284"
}

но я хочу, чтобы это было так:

array(5) {
 ["title5"]=>
 array(2) {
 [0]=>
 string(22) "http://example.com/292"
 [1]=>
 string(22) "http://example.com/291"
 }
 ["title2"]=>
 string(22) "http://example.com/290"
 ["title"]=>
 string(22) "http://example.com/288"
 ["title3"]=>
 string(22) "http://example.com/284"
 ["title4"]=>
 array(2) {
 [0]=>
 string(22) "http://example.com/275"
 [1]=>
 string(22) "http://example.com/274"
 }
}

поэтому в основном я хочу сортировать массив от высокого до низкого в ключах сохранения url, но когда я arsort он ставит значения, которые являются массивами в верхней части списка, независимо от числа в URL-адресе

2 ответа

EDIT переключился на uasort как было предложено @xpapad

Вы должны использовать uasort() и реализовать свою собственную функцию сравнения, возможно:

uasort($arr, function($a, $b) {
 return strcmp(is_array($a) ? $a[0] : $a, is_array($b) ? $b[0] : $b);

});


Я думаю, что ваши требования не определены. Как должен вести сортировка для следующего массива?

$myarray = array(
 'title1' => array( '1000', '800' ),
 'title2' => 900
);

Вы, кажется, предположили, что этот сценарий невозможен и что все значения внутри внутреннего массива не могут быть прерваны никаким значением вне этого массива, так это в случае?

Если это так, вы должны использовать пользовательскую сортировку, как предлагал @Dor- Shemer, но используйте uasort, а не usort, чтобы поддерживать ассоциацию ключевых значений.

licensed under cc by-sa 3.0 with attribution.