2012-02-10 5 views
2

こんにちは、テーブルの上に国のリストを持っているし、私はこのAfghanistan, Bangladesh,Cape Verde, Denmark,Equatorial Guinea,Falkland Islands,USA, Yemen , ZambiaようなAZの位置を取得しますが、実際に私はここで、この順USA,Afghanistan, Bangladesh,Cape Verde, Denmark,Equatorial Guinea,Falkland Islands, Yemen , Zambiaのように(私は最初の要素を意味する)上にUSAを必要とする私のコードはPHPのデータのソートリスト?私は国の名前でソートしていますので、

です
<?php 
require 'dbconnect.php'; 
$empty=array(); 
$c=0; 

$query="select * from phpfox_country"; 
$result=mysql_query($query); 

if($result) 
{ 
    while($row=mysql_fetch_row($result)) 
    { 

    if($row[1]=="United States") 
    { 
    $message=array("country_iso"=>$row[0],"name"=>$row[1]) 
    } 
    else 
    { 
    $message[$c]=array("country_iso"=>$row[0],"name"=>$row[1]); 
    } 

    $c++; 
    } 
    $message=($message==null)?$empty:$message; 
} 
else 
{ 
$message=array("message"=>"error in code"); 
} 
echo json_encode($message); 
?> 

先生に感謝します。

答えて

1

コードにエラーがあるようです。最初に、$cをデフォルトで0に設定し、それを配列インデックスとして使用すると、アルファベット順に最初の国が米国ではなくそのスロットに割り当てられます。さらに悪いことに、あなたが実際にUSAで行に達したら、それを既存の配列に追加するのではなく、代わりに新しい配列を割り当てることによって配列を上書きします。

$cを一切使用しないことをお勧めします。代わりに、空の配列から始めて、配列の先頭にUSAを追加し、配列の最後に他のすべての国を追加します。レコードを整理するのは、SQL照会で行うのが最も簡単です。以下のコードでは、国名の列がnameと仮定しています。そうでない場合は、自分で修正することができます。

<?php 
require 'dbconnect.php'; 
// Create empty array 
$message=array(); 

$query="SELECT * FROM phpfox_country ORDER BY name ASC"; 
$result=mysql_query($query); 

if($result) 
{ 
    while($row=mysql_fetch_row($result)) 
    { 
     if($row[1]=="United States") 
     { 
      // Add to start of the array 
      array_unshift($message, array("country_iso"=>$row[0],"name"=>$row[1])); 
     } 
     else 
     { 
      // Add to end of the array 
      $message[]=array("country_iso"=>$row[0],"name"=>$row[1]); 
     } 
    } 
} 
else 
{ 
    $message=array("message"=>"error in code"); 
} 
echo json_encode($message); 
?> 
2

理由だけではなく、一つの方法は、配列の先頭に場所を確保することである

SELECT * FROM phpfox_country 
     ORDER BY IF (countryName !='USA',countryName,'') ASC 
0

mysqlのクエリではできない。

<?php 
require 'dbconnect.php'; 
$message=array(0 => 'placeholder'); 

$query="select * from phpfox_country"; 
$result=mysql_query($query); 

if($result) 
{ 
    while($row=mysql_fetch_row($result)) 
    { 

    if($row[1]=="United States") 
    { 
     $message[0]=array("country_iso"=>$row[0],"name"=>$row[1]) 
    } 
    else 
    { 
     $message[]=array("country_iso"=>$row[0],"name"=>$row[1]); 
    } 

    $c++; 
    } 
} 
else 
{ 
    $message=array("message"=>"error in code"); 
} 

echo json_encode($message); 
?> 
0

このようなクエリやコードに変更します

<?php 
require 'dbconnect.php'; 

$query = "select * from phpfox_country order by <country_name>='USA' DESC,<country_name>"; 
$result=mysql_query($query); 

if($result) 
{ 
    $message = array(); 
    while(false!==($row=mysql_fetch_row($result))) 
    { 
     $message[] = array("country_iso"=>$row[0],"name"=>$row[1]) 
    } 
} 
else 
{ 
    $message=array("message"=>"error in code"); 
} 
echo json_encode($message); 
?> 

<country_name>を国名の列に置き換えることを忘れないでください。

関連する問題