2011-07-28 26 views
0

私はMySQLデータベースから配列を取り込んでいますが、問題は、ドロップダウンボックスに空白のフィールドが9つあります。私は何を間違えたのですか?PHP多次元配列ヘルプ

PHPコード:

while($row = mysql_fetch_assoc($results)) 
{ 
    $options[] = array(
         Name => $row['Name'], 
         Value => $row['Value'], 
         ID => $row['CID'] 
        ); 
} 

ドロップダウンボックス:

for ($i = 0; $i < 9; $i++) 
{ 
    print '<option id="'.$options[$i]["ID"].'" value="'.$options[$i]["Value"].'">' 
      .$options[$i]["Name"]. 
      '</option>'."\n"; 
} 
+0

'print_r($ options);'と '* while * while'ループの出力を表示してください。 –

答えて

2

あなたの引用符は、あなたの配列に後方

while($row = mysql_fetch_assoc($results)) 
{ 
    $options[] = array("Name" => $row['Name'], "Value" => $row['Value'], "ID" => $row['CID']); 
} 

ている。また、二重引用符で連想配列を使用してする必要がありますこれを行う:

echo "I want to print out this: {$arr['index']}"; 

このようにしないと、解析エラーが発生するはずです。

あなたは、これがまた

echo $arr[index] 

を働くことに気づくかもしれませんが、定義()という名前のインデックス介して定がある場合は、あなたの文のすべてがするのではなく、あなたの定数の定義を使用しますので、これは良い習慣ではありませんあなたが意図した文字列。

0

あなたは配列のキーName, Value, IDを引用する必要があります。"$row['key']"の前後に引用符を置く

$options[] = array('Name' => "$row['Name']", 'Value' => "$row['Value']", 'ID' => "$row['CID']"); 

は不要と冗長です。あなたのクエリを想定し

The PHP array documentation

2

実際の問題は、あなたの配列のキーにあなたの配列の値を初期化している方法である、実行されます。 PHPでは、連想配列のキーは文字列でなければならず、PHPの文字列は一重引用符または二重引用符で囲みます。

$foo[Name] // incorrect, Name isn't a string 
$foo['Name'] // correct 

その値を取得するには、二重引用符で囲まれた文字列内の配列を使用するときは、中括弧で配列を囲む必要があります:

"$foo['Name']" // can cause problems 
"{$foo['Name']}" // good practice 
連想配列へのアクセス

$foo = array(Name => 'value'); // incorrect, Name isn't a string 
$foo = array('Name' => 'value'); // correct 

も、キーの文字列を使用する必要があります

通常の変数を含む中括弧のテクニックを使用できます。

$bar = "Hello"; 
$foo['Name'] = "World"; 
echo "{$bar} {$foo['Name']}"; // prints Hello World! 

やりたいことがすべての行の保存であれば、あなただけの全体$row配列保存することができます:

$options[] = $row; 

ではなく、配列から配列への個々の値をコピーします。これは、より簡潔で読みやすく、エラーの発生が少なく、$rowの内容が変更された場合に一般化されます。もちろん、$rowの内容が変更された場合、これには$optionsに依存する変更が必要な落とし穴があります。