Хорошо, у меня есть массив, который используется для переноса имен, он выглядит так:
array(2) { [0]=> array(3) { ["firstName"]=> string(3) "Joe" ["lastName"]=> string(5) "Black" ["uid"]=> int(3225) } [1]=> array(3) { ["firstName"]=> string(4) "John" ["lastName"]=> string(3) "Doe" ["uid"]=> int(3516) } }
Теперь, как мне отсортировать этот массив по lastName
?
У StackOverflow есть много похожих вопросов, но позвольте мне привести вам быстрый пример. Для этого вы можете использовать usort()
.
Пример PHP 5.3 (не самый приятный, но может быть проще понять):
uasort($array, function ($i, $j) { $a = $i['lastName']; $b = $j['lastName']; if ($a == $b) return 0; elseif ($a > $b) return 1; else return -1; });
AS, который я опубликовал в php.net , вы можете использовать эту функцию:
<?php function sksort(&$array, $subkey="id", $sort_ascending=false) { if (count($array)) $temp_array[key($array)] = array_shift($array); foreach($array as $key => $val){ $offset = 0; $found = false; foreach($temp_array as $tmp_key => $tmp_val) { if(!$found and strtolower($val[$subkey]) > strtolower($tmp_val[$subkey])) { $temp_array = array_merge( (array)array_slice($temp_array,0,$offset), array($key => $val), array_slice($temp_array,$offset) ); $found = true; } $offset++; } if(!$found) $temp_array = array_merge($temp_array, array($key => $val)); } if ($sort_ascending) $array = array_reverse($temp_array); else $array = $temp_array; } ?>
Короткие и многоразовые методы:
usort($array, 'nameSort'); function nameSort($a, $b) { return strcmp($a['lastName'], $b['lastName']); }