Whileループで連想配列の配列を作成したいと思います。 whileループの各反復で、配列に新しい要素を追加したいと思います。どうすればそれができますか?その後、この配列をforeachに渡して、データを出力します。私は今のところコードのこの部分を持っていますが、明らかに何かが間違っています。
while($row2 = mysql_fetch_array($result))
{
$myarray = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]);
}
配列の最後に要素を追加するには、[]
を使用します
例:
$myarray[] = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]);
明らかに、わかりました。最初にそれを分解して、学ぶべきことがあるようにします。
while($row2 = mysql_fetch_array($result))
{
...
}
この部分は大丈夫です、ループの内部を見てみましょう:
$myarray = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]);
複数のポイントがあります。おそらく最も重要なのは、ループ内にあるため、各反復で$myarray
を上書きすることです。代わりに、配列に追加したいとします。これをやろう:
$myarray = array(); # initialize the array first!
while($row2 = mysql_fetch_array($result))
{
$myarray[] = $row2; # add the row
}
その後、それを出力して、基本的に機能することを証明できます。
var_dump($myarray);
これは、すべての行を含む配列を示しています。次に、データベースクエリを変更するだけで、関心のあるフィールドのみが返されるようになります。
データベースでそれができない場合は、配列を操作することもできます。
$myarray = array(); # initialize the array first!
while($row2 = mysql_fetch_array($result))
{
$myarray[] = array(
"id" => $theid,
"name" => name($id),
"text" => $row2['text']
);
}
var_dump($myarray);
これで、結果は希望どおりになります。 $myarray
を出力するには:
foreach ($myarray as $number => $row)
{
echo '<div>Number ', $number, ':<dl>';
foreach ($row as $k => $v)
{
printf("<dt>%s</dt><dd>%s</dd>\n", $k, htmlspecialchars($v));
}
echo '</dl></div>'
}
各反復で$ myarrayに追加しようとしている場合は、次のようにします。
$myarray[] = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]);
またはこのように:
array_Push($myarray, array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]));
明らかに$row2
へのアクセスが間違っているように見えたので、ここが正しいと思いました
$myarray = array();
while($row2 = mysql_fetch_array($result)) {
// append something to your array with square brackets []
$myarray[] = array("id"=> $row2['id'], "name" => $row2['name'], "text"=>$row2['text']);
// or to maker this even shorter you could do
$myarray[] = $row2; // ... because it has the same array key names
}
その後、それから読みたいとき:
foreach($myarray as $val) {
echo $val['name'].' (ID: '.$val['id'].') wrote following text: '.$val['text'];
}