2016-03-22 8 views
-1

私は同様の質問をしましたが、いくつかの面ではまだ問題があります。 このPHPファイルが動作している方法は、人名がnamesセルのデータベースにJohn Doe(firstname lastname)の形式で格納されていることです。だから私は、このコードで名前を分離しましたので、姓、ファーストネーム:姓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>"; 

は今、それは私にドウ、ジョンのような名前のリストを与えます。 しかし、私は姓の順に名前をソートする必要があります。 を使用しています。どうすればいい?私はコードで遊んでみましたが、まだ名前の順番で表示されています(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配列は、顧客の姓でソートされます。姓は最後のスペースの後の文字列を意味します。 John DoeはDoeになるだろう。メアリー・ルー・フーはフーです。

使用機能の詳細については、http://php.netを参照してください。

+0

ありがとう、問題は、顧客名の一部は、Mary Lou Exampleのような名前です。したがって、array_popはスペースで爆発します。 – dchodev

+0

@dchodevがMary Lou Exampleを考慮に入れて更新されました。 – 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'))); 
?>