2016-06-20 8 views
2

localhost MySqlテーブルの列をループしています。私はこの表のすべての値を印刷することができます。私の目標は、これらの値をJSON形式に変換して、アンドロイドアプリがListViewを読み込んで読み込むことができるようにすることです。私は のJSON文字列をフォーマットするのに必要なキーと値のペアの "キー"値の設定に問題があるようです。キーと値のペアを持つこれらのjson_encode配列を作成するためにwhileループを使用する方法はわかりません。JSON形式の文字列のキーと値のペアを生成するPHPの配列

は、ここで私はこれまで試してみましたものです:

それは動作しますが、私は私のwhileループは、キー/値のペアを割り当て、私のアプリは、リストビューにアップロードすることができるようにJSON文字列を作成します。

//all connections to database have been established 
$hold = "select email from info"; 
$h = mysqli_query($connection,$hold); 
$a = array(); 
$d = 0; 

while($row = mysqli_fetch_array($h)){ 
    echo $d.'<pre>'.$row['email'].'<pre>';//this works fine 
    $a[d] = $row['email']; //values have been assigned to array that will be  
    //converted to JSON format, but how can I assign the "key" to each value 
    //now inside here it says that 'd' is an undefined constant. What could be 
    //wrong with the scope of 'd'? 
    $d++; 
} 

キーが割り当てられたら、json_encode()で配列をjson形式に変換するだけで済みます。私のアンドロイドアプリでは、これらのキーと値のペアを取得します。だから何とかして、私のアプリケーションコードは、 "キー"がwhileループの中でどのように割り当てられたのかを知る必要があります。アルファベット順に並べられたキーでもかまいませんので、値を取得するのに役立つオーダーに従うことができます。

ご意見やご提案がありましたら、アドバイスをお願いします。

あなたは0からnまでのキーが必要な場合は、配列にインデックスに自分を必要としないあなたに

答えて

1

ありがとうございます。

$a[] = $row['email']; 

またdは(それ変数への参照にすることになる)あなたは$とそれを接頭辞いないため、未定義の定数です。

は通り

1

PHP docs - Creating/modifying with square bracket syntaxを参照してください他のコメント/答えは$a[] = $row['email'];は全く$dを使用せずにこれを実現していますが、そのようインクリメント番号を使用して、後でデータベースから値を取得する必要がある場合は、おそらくないでしょうだろう、と述べています作業。

あなたのテーブルには、PHPで生成された無関係の整数ではなく、あなたのキーとして使用できるレコード(オートインクリメントIDが私の選択)を検索するときに参照するための一意の識別子が必要です。ただ、ここでのコメントに基づいて明確にする

$hold = "select id, email from info"; 
$h = mysqli_query($connection,$hold); 
$a = array(); 

while($row = mysqli_fetch_array($h)){ 
    $a[ $row['id'] ] = $row['email']; 
    // key    value 
} 

:あなたは、データベースにこの一意のIDを確立していたら、このようにそれを使用するようにコードを変更することができ

$a[d] = $row['email'];  // d is an undefined constant 
$a[$d] = $row['email'];  // value of $d will be used as key (0, 1, 2, etc.) 
$a['d'] = $row['email']; // literal letter 'd' will be used as key (repeatedly) 
$a[] = $row['email'];  // PHP automatically assigns incrementing numeric keys (0,1,etc.) 
+0

私の愚かな間違いは、周りに一重引用符を入れないでください。情報のおかげで。私はこのテーブルの列に参照識別子を置き、jsonでエンコードされた文字列を生成するためにキーを使用します。 thanks @ don'tpanic –

+1

dを一重引用符で囲んでも、1つのレコードしかない場合を除き、期待する出力は得られません。そうすることで、 '$ a'配列の文字列' d 'をキーとして使い、それをwhileループの各繰り返しで上書きします。 '$ d'変数を使いたい場合は、' $ a [d] 'の代わりに' $ a [$ d] 'を使いますが、' $ a [] 'と同じ効果があります。 –

1

あなたは必要jsonにいくつのキーと値のペアがあるかを知ることができます。 count phpのメソッドを使用して、そこにいくつあるかを判断し、jsonに入れることができます。

キーを決定するには、シーケンスを使用する必要があります。

//all connections to database have been established 
$hold = "select email from info"; 
$h = mysqli_query($connection,$hold); 
$a = array(); 
$d = 0; 

while($row = mysqli_fetch_array($h)){ 

$a["x".$d] = $row['email']; //Now you know, that keys will be like x0, x1, x2, x3... 
//converted to JSON format, but how can I assign the "key" to each value 
//now inside here it says that 'd' is an undefined constant. What could be 
//wrong with the scope of 'd'? 
$d++; 
} 

$a["total"] = count($a); // this gives you total number of key/value pairs 

また、 'echo'ステートメントはjson出力を妨げる可能性があるため、削除する必要があります。

最後にjson_encodeを使用できます。

+0

ありがとう@EresDevあなたは素晴らしいアイデアを出しました。私はすでに問題を解決しました。どうもありがとうございます。 –

関連する問題