PHP foreach()不按预期循环数据?

时间:2010-12-28 19:07:47

标签: php foreach

我有PHP代码,但我无法让它工作?

这是主要的PHP文件:     

function get_data() {
$query = 'SELECT title, article FROM submissions';
$result = mysql_query($query);

$i = 0;
while ($row = mysql_fetch_assoc($result)) {
++$i;

$row['i'] = $i;

$row['title'] = limittext($row['title'], 15);

}
return $row; //perhaps because $row is not return all?

}

$data = get_data();

require('template/data.inc.php');

?>

这是template / data.inc.php:

<?php

foreach ($data as $value):

echo $data['i'].'<br>';

echo $data['title'].'<br>';

echo $data['article'].'<br>';

endforeach;

?>

template / data.inc.php意味着输出如下内容:

1 How to get your site on Google?
Text... 
2 Secrets of SEO Revealed
Text...

我的猜测是get_data()没有以foreach中支持的形式返回array()吗? - 因为它目前正在给出错误。

3 个答案:

答案 0 :(得分:5)

这是你的问题:

$i = 0;
while ($row = mysql_fetch_assoc($result)) {
++$i;

$row['i'] = $i;

$row['title'] = limittext($row['title'], 15);

}

在每次迭代中,$row都会重置为当前记录,最后mysql_fetch_assoc会将其转为FALSE。您必须将每个$row放入辅助数组并将其作为整个结果集返回:

$i = 0;
$returnArray = array();
while ($row = mysql_fetch_assoc($result)) {
++$i;
$row['i'] = $i;
$row['title'] = limittext($row['title'], 15);
$returnArray[] = $row;
}

return $returnArray;

您的模板中的ANd使用$value获取每行的详细信息:

foreach ($data as $value):
echo $value['i'].'<br>';
echo $value['title'].'<br>';
echo $value['article'].'<br>';
endforeach;

答案 1 :(得分:0)

您构建$ row并返回它的方式

$i = 0;
while ($row = mysql_fetch_assoc($result)) {
    ++$i;

    $row['i'] = $i;

    $row['title'] = limittext($row['title'], 15);

    }
    return $row;
}

你只会设置$ row的最后一次迭代...如果这是你想要的?换句话说,$ row只会继续一个值。

答案 2 :(得分:0)

循环继续,直到$ row的值被评估为false:

while ($row = mysql_fetch_assoc($result)) {

然后你返回$ row所以你总是返回null或false!

替换

$row['title'] = limittext($row['title'], 15);

$row['title'] = limittext($row['title'], 15);
$result[]=$row;

return $row;

return $result;