有php foreach和通过引用传递的困难

时间:2013-01-31 19:51:36

标签: php mysql sql

我从数据库中提取一些数据(使用我称之为查询的函数),我想为每个结果添加另一个键/值对,即:

$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中的循环输出两次相同的东西。如果有三个:它输出第一个,然后输出第二个中的两个。这有什么问题?

4 个答案:

答案 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,请改用PDOmysqli

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 } ?>