12

while ループで連想配列の配列を作成したい。while ループの各反復で、配列に新しい要素を追加したいと考えています。どうすればそれができますか?その後、この配列を foreach に渡してデータを出力したいと思います。私は今のところコードのこの部分を持っていますが、明らかに何かが間違っています。

while($row2 = mysql_fetch_array($result))
{ 
    $myarray = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]);
                            }
4

4 に答える 4

24

配列の最後に要素を追加するには、[]
例を使用します。

$myarray[] = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]);
于 2012-04-18T22:02:12.490 に答える
7

明らかに、わかりました。最初にそれを分解して、学ぶべきことがあるようにします。

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>'
}
于 2012-04-18T22:04:48.203 に答える
4

各反復で$myarrayに追加しようとしている場合は、次のようにします。

$myarray[] = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]);

またはこのように:

array_push($myarray, array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]));
于 2012-04-18T22:03:56.160 に答える
2

明らかにあなたのアクセス$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'];
}
于 2012-04-18T22:01:49.243 に答える