1

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

$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

4 回答 4

4

使用 foreach() 进行修改时,我有时会遇到奇怪的结果。我用

foreach ($items as $key=>$value) {
    $items[$key] = modified($value);
}

或者,为什么不在 SQL 中做呢?SELECT your, fields, here, REPLACE(name, ' ', '-') AS fixedname

于 2013-01-31T20:02:45.000 回答
0

你可以做一个正常的for循环

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

然后,当您进行下一次 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 ,使用PDOormysqli代替

2 ---- $items = query("SELECT * ....>调用未定义的函数查询()

将其更改为

$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 回答