У меня есть следующая структура массива:
Array
(
[0] => Array
(
[configuration_id] => 10
[id] => 1
[optionNumber] => 3
[optionActive] => 1
[lastUpdated] => 2010-03-17 15:44:12
)
[1] => Array
(
[configuration_id] => 9
[id] => 1
[optionNumber] => 2
[optionActive] => 1
[lastUpdated] => 2010-03-17 15:44:12
)
[2] => Array
(
[configuration_id] => 8
[id] => 1
[optionNumber] => 1
[optionActive] => 1
[lastUpdated] => 2010-03-17 15:44:12
)
)
Что лучший способ состоит в том, чтобы заказать массиву возрастающим способом, на основе optionNumber
?
Таким образом, результаты похожи:
Array
(
[0] => Array
(
[configuration_id] => 8
[id] => 1
[optionNumber] => 1
[optionActive] => 1
[lastUpdated] => 2010-03-17 15:44:12
)
[1] => Array
(
[configuration_id] => 9
[id] => 1
[optionNumber] => 2
[optionActive] => 1
[lastUpdated] => 2010-03-17 15:44:12
)
[2] => Array
(
[configuration_id] => 10
[id] => 1
[optionNumber] => 3
[optionActive] => 1
[lastUpdated] => 2010-03-17 15:44:12
)
)
Используйте usort
.
function cmp_by_optionNumber($a, $b) {
return $a["optionNumber"] - $b["optionNumber"];
}
...
usort($array, "cmp_by_optionNumber");
В PHP ≥5.3 вместо этого следует использовать анонимную функцию :
usort($array, function ($a, $b) {
return $a['optionNumber'] - $b['optionNumber'];
});
Обратите внимание, что оба приведенных выше кода предполагают, что $ a ['optionNumber']
является целым числом. Используйте @St. Решение Джона Джонсона , если они являются строками.
В PHP ≥7.0 используйте оператор космического корабля <=>
вместо вычитания, чтобы предотвратить проблемы переполнения / усечения.
usort($array, function ($a, $b) {
return $a['optionNumber'] <=> $b['optionNumber'];
});
Use usort
usort($array, 'sortByOption');
function sortByOption($a, $b) {
return strcmp($a['optionNumber'], $b['optionNumber']);
}