2016-03-22 2 views
-1

Я задал аналогичный вопрос, но все еще имею проблемы, когда некоторые аспекты. Способ работы этого php-файла заключается в том, что имя пользователя хранится в базе данных в ячейке names в формате John Doe (имя первого имени). Поэтому я отделил имя с этим кодом, так что фамилия, имя::Фамилия usort

foreach ($customer_names as $key => $value) { 
         $parts = explode(" ", $value->name); 
         $lastname = array_pop($parts); 
         $firstname = implode(" ", $parts);      
         $name = $lastname.", ".$firstname." "; 

         echo "<option value='$value->name'>$name </option>"; 

теперь дает мне список имен, как лани, Джон. Однако мне нужно отсортировать имена в порядке фамилии. используя usort. Как мне это сделать? Я пробовал играть с кодом, но все еще отображается в порядке первого имени (задается с помощью запроса db). Все еще немного нова для функциональности usort.

+0

Начать с 'natsort' и' array_reverse' –

ответ

0

Это должно работать:

usort($customer_names, function($customer1, $customer2) { 
    return strcmp(
     substr($customer1->name, strrpos($customer1->name, " ")), 
     substr($customer2->name, strrpos($customer2->name, " ")) 
    ); 
}); 

Ваш $customer_names массив будет сортировать по фамилии заказчика. Фамилия означает строку после последнего пробела, например. Джон Доу был бы Доу. Мэри Лу Фу была бы Фу.

Чтобы узнать больше о используемых функциях, обратитесь к http://php.net.

+0

Спасибо, вопрос, некоторые из имен клиентов являются именами, как, Мэри Л Пример. Следовательно, array_pop и взорваться пробелами. – dchodev

+0

@dchodev обновлен, чтобы принять Мэри Лу. – Gordon

0
//Program for sorting list of names according to last name 
<?php 
class array_sort 
{ 
    public $temp; 
    public function alhsort(array $sorted) 
    { 
     for($i=0; $i<count($sorted)-1; $i++){ 
      for($j=$i+1; $j<count($sorted); $j++){ 
       if(strcasecmp(end(explode(' ', $sorted[$i])), end(explode(' ', $sorted[$j])))>0){ 
        $temp = $sorted[$i]; 
        $sorted[$i] = $sorted[$j]; 
        $sorted[$j] = $temp; 
       } 
      } 
     } 
     return $sorted; 
     } 
} 
$sortarray = new array_sort(); 
print_r($sortarray->alhsort(array('Ayush Jain', 'Abhishek Gupta', 'Rahul Rajput', 'Kapil Patel', 'Shobit Shrivastav', 'Hitesh Gupta'))); 
?>