сортировка массива по элементу

#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');