PHP foreach () не перебирает данные, как ожидалось? - PullRequest
2 голосов
/ 28 декабря 2010

У меня есть следующий 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');

?>

и это шаблон / 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 () не возвращает array () в форме, которая поддерживается в foreach? - так как в настоящее время выдает ошибку.

Ответы [ 3 ]

5 голосов
/ 28 декабря 2010

Вот ваша проблема:

$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;

И в вашем шаблоне используйте $value, чтобы получить детали для каждой строки:

foreach ($data as $value):
echo $value['i'].'<br>';
echo $value['title'].'<br>';
echo $value['article'].'<br>';
endforeach;
0 голосов
/ 28 декабря 2010

Ваш цикл продолжается до тех пор, пока $ row не получит значение, которое оценивается как ложное:

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

, а затем вы вернете $ row, чтобы вы всегда возвращали ноль или ложь!

replace

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

с

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

и

return $row;

с

return $result;
0 голосов
/ 28 декабря 2010

То, как вы строите $ row и возвращаете его

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

    $row['i'] = $i;

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

    }
    return $row;
}

У вас будет только когда-либо ИСТИННАЯ итерация $ row ... если вы этого хотите?Другими словами, $ row будет продолжать только одно значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...