我从数据库中提取一些数据(使用我称之为查询的函数),我想为每个结果添加另一个键/值对,即:
$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; ?>
但是,这不能正确输出。例如,当查询返回两个项时,php中的循环输出两次相同的东西。如果有三个:它输出第一个,然后输出第二个中的两个。这有什么问题?
答案 0 :(得分:4)
使用foreach()进行修改时,我偶尔会得到奇怪的结果。我用
foreach ($items as $key=>$value) {
$items[$key] = modified($value);
}
或者,为什么不在SQL SELECT your, fields, here, REPLACE(name, ' ', '-') AS fixedname
答案 1 :(得分:0)
你可以做一个正常的循环
<?php
for($i=0; $i < count($items); $i++){
$items[$i]['fixedname'] = str_replace(' ','_',$items[$i]['name']);
}
?>
当你去下一个foreach时,一切都会准备就绪。
答案 2 :(得分: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']);
}
答案 3 :(得分:0)
1 - 不要使用mysql,请改用PDO
或mysqli
2 - $items = query("SELECT * ....
---&gt;调用未定义的函数查询()
将其更改为
$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 } ?>