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

new*_*php 2 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');

?>
Run Code Online (Sandbox Code Playgroud)

这是template/data.inc.php:

<?php

foreach ($data as $value):

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

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

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

endforeach;

?>
Run Code Online (Sandbox Code Playgroud)

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

1 How to get your site on Google?
Text... 
2 Secrets of SEO Revealed
Text...
Run Code Online (Sandbox Code Playgroud)

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

dev*_*ler 5

这是你的问题:

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

$row['i'] = $i;

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

}
Run Code Online (Sandbox Code Playgroud)

在每次迭代时,$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;
Run Code Online (Sandbox Code Playgroud)

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

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