Я пытаюсь сортировать массив значений.
Возможные значения в массиве: «neg_infinity», … {real numbers}, .., 'infinity'
<?php $a = array( array('column' => 3), array('column' => -1), array('column' => 1), array('column' => .1), array('column' => 2), array('column' => 'infinity'), array('column' => 'neg_infinity'), array('column' => 'infinity'), );
Я хочу:
$a = array( array('column' => 'neg_infinity'), array('column' => -1), array('column' => .1), array('column' => 1), array('column' => 2), array('column' => 3), array('column' => 'infinity'), array('column' => 'infinity'), );
Я играл с uasort .
У кого-нибудь есть решение его проблемы?
ИСПЫТАТЕЛЬНЫЙ ВОДИТЕЛЬ
<?php function cmp($a, $b) { if ($a == $b) { return 0; } if ($a == 'neg_infinity') { return -1; } if ($a == 'infinity') { return 1; } return ($a < $b) ? -1 : 1; } $a = array('a' => 'infinity', 'b' => 8, 'c' => -1,'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4, 'd' => 'neg_infinity'); uasort($a, 'cmp'); var_dump($a);
Ты хитрый ублюдок! Я дам вам плюс один, потому что мне потребовалось 20 минут, чтобы получить массив массивов.
function cmp($a, $b) { if ($a['column'] == 'neg_infinity') { return -1; } if ($a['column'] == 'infinity') { return 1; } if ($b['column'] == 'neg_infinity') { return 1; } if ($b['column'] == 'infinity') { return -1; } if ($a['column'] == $b['column']) { return 0; } return ($a['column'] < $b['column']) ? -1 : 1; }
он протестирован: http://codepad.org/13GuICbH
IdeOne слишком мейнстрим, я знаю.
Используйте это для вашей функции сортировки:
function cmp($a, $b) { if ($a == 'neg_infinity') { return -1 } if ($a == 'infinity') { return 1 } return ($a < $b ? -1 : 1) }
Что-то вроде этого должно работать:
function cmp($a, $b) { if ($a == $b) { return 0; } if ($a == 'neg_infinity') { return -1; } if ($a == 'infinity') { return 1; } return ($a < $b) ? -1 : 1; }