1

データベースからいくつかのデータを取得しています (query と呼ばれる関数を使用)。各結果に別のキーと値のペアを追加します。つまり、次のようになります。

$items = query("SELECT * FROM items");

foreach($items as &$item) {
    $item['fixedname'] = str_replace(' ','_',$item['name']);
}

今、これらをhtmlビューに配置したいと思います。

<?php foreach($items as $item): ?>
<div id="<?= $item['fixedname'] ?>" ><?= $item['name'] ?></div>
<?php endforeach; ?>

ただし、これは正しく出力されません。たとえば、クエリが 2 つのアイテムを返す場合、php のループは同じものを 2 回出力します。3 つある場合: 最初の 1 つを出力し、次に 2 つ目の 2 つを出力します。ここで何が問題なのですか?

4

4 に答える 4

0

You could do a normal for loop

<?php 
    for($i=0; $i < count($items); $i++){
        $items[$i]['fixedname'] = str_replace(' ','_',$items[$i]['name']);
    }
?>

Then everything will be ready when you go to your next foreach.

于 2013-01-31T20:07:15.873 に答える
0

foreach の右側に返されるデータはデータのコピーであり、直接変更することはできません。代わりに、$key (配列内のアイテムの ID) と $item の両方をフェッチする必要があります。PHP に $key を通知させることで、配列が通常 (たとえば、インデックスが 0、1、2、...) で連想可能かどうかを心配する必要がなくなります。

This example would walk the $items array and add 'fixedname' into it.

foreach($items as $key => $item) {
    $items[$key]['fixedname'] = str_replace(' ','_',$item['name']);
}
于 2013-01-31T20:21:54.693 に答える
0

あなたはたくさんの間違ったことを持っています

1 - mysql を使用しないでください。代わりにPDOorを使用してくださいmysqli

2 - $items = query("SELECT * ....--->未定義関数 query() の呼び出し

に変更します

$items = mysql_query("SELECT *  ....

3 - Invalid argument supplied for foreach()

クエリの取得に失敗しました

このコード全体を試してください

 $items = mysql_query("SELECT * FROM items");

 ?>
<?php while ($row = mysql_fetch_array($items) ) {?>
 <div id="<?php echo $row['fixedname'] ;?>" ><?php echo $row['name']; ?></div>
<?php } ?>
于 2013-01-31T20:21:56.853 に答える