У меня есть массив выглядит как:Пользовательская сортировка массива в PHP
[0] => array(23 , 890)
[1] => array(56 , 401)
[2] => array(56 , 491)
[3] => array(98 , 840)
[4] => array(56 , 821)
[5] => array(98 , 401)
[6] => array(23 , 875)
Я хочу, чтобы отсортировать данные по первому элементу, а затем второй, НО (здесь приходит вопрос на миллион долларов), когда второй элемент имеет число 9 в середине (x9x), я хочу отсортировать его последним. Как это:
[6] => array(23 , 875)
[0] => array(23 , 890) // !!!
[1] => array(56 , 401)
[4] => array(56 , 821) // note that 821 is before 491, even though it is greater
[2] => array(56 , 491) // !!!
[5] => array(98 , 401)
[3] => array(98 , 840)
Я пытался возиться с usort (http://php.net/manual/en/function.usort.php), но без успеха. При сравнении $ a с $ b в cmp-функции я сделал:
if($a[0] > $b[0])
return 1;
elseif($a[0] < $b[0])
return -1;
else
if($a[1][1] == 9) // this did not do what I wanted
return 1;
if($a[1] > $b[1])
return 1;
elseif($a[1] < $b[1])
return -1;
else
return 0;
Я действительно мог бы вам помочь!
У вас 'var_dump ($ а [1] [1]) '? Возможно, это не то, что вы ожидаете, и вы должны явно преобразовать '$ a [1]' в строку? –
'[1]' будет работать, только если значение представляет собой строку; поэтому сначала запишите число в строку. Также учтите, что '$ b' и/или * оба * элемента могут иметь' 9' в середине, и в этом случае вам нужно вернуть '-1' и' 0' соответственно. – deceze
'strval ($ a [1]) [1] == 9' должен заставить его работать – SeinopSys