#php
#php
Вопрос:
У меня есть этот массив, и я хочу отсортировать его по имени
Array
(
[id] => 12
[name] => Henry Davidson
[modified] => 2011-03-14 21:48:59
[modified_by] => James H
)
Ответ №1:
Вы, вероятно, хотите использовать uasort. (http://www.php.net/manual/en/function.uasort.php ) с вашей собственной функцией обратного вызова для сортировки по полю, по которому вы хотите выполнить сортировку. Обычно для таких вещей, как имя, вы можете использовать http://php.net/manual/en/function.strcmp.php
Непосредственно из примера на странице uasort:
<?php
function cmp($a, $b)
{
return strcmp($a["fruit"], $b["fruit"]);
}
$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp");
while (list($key, $value) = each($fruits)) {
echo "$fruits[$key]: " . $value["fruit"] . "n";
}
?>
Ответ №2:
$names = array();
foreach ( $your_array as $key => $value )
{
$names[$key] = $value['name'];
}
array_multisort($names, SORT_ASC, $your_array);
Комментарии:
1. Рад слышать, что это работает для вас. Опубликуете ли вы свои изменения в интересах других, которым это может понадобиться в будущем?
Ответ №3:
Сортирует по фамилии. Возможно, вам придется внести некоторые изменения, если там больше или меньше имени и фамилии.
function sort_by_name($a, $b)
{
$a = explode(' ', $a['name']);
$b = explode(' ', $b['name']);
if($a[1] == $b[1])
{
return strcmp($a[0], $b[0]);
}
return strcmp($a[1], $b[1]);
}
usort($array, 'sort_by_name');