Как написать foreach, который даст результаты, которые я хочу - PullRequest
0 голосов
/ 25 октября 2009

Мне трудно получить правильные данные из массива. Я написал вложенный цикл foreach, но внутренний цикл выдает ошибку «Недопустимый аргумент для foreach ()». Может кто-нибудь помочь мне с этим? Спасибо.

foreach($row as $val)
{
    echo $val['title'].'<br>';
    echo $val['author'].'<br>';
    echo $val['post'].'<br>';
    echo $val['entry_date'].'<br>';
    echo $val['comments'].'<br>';

    foreach($val as $val2)
    {
        echo $val['comments'].'<br>';
    }
}

Array
(
    [title] => First Blog
    [author] => Administrator
    [post] => Testing entry number one
    [entry_date] => Fri, 23 Oct 2009
    [comments] => Array
        (
            [0] => Array
                (
                    [commenter] => Sally Anderson
                    [comments] => comment 1 post 1
                    [comment_date] => October 24th, 2009 at 5:24 AM
                )

            [1] => Array
                (
                    [commenter] => Mike Jones
                    [comments] => comment 2 post 1
                    [comment_date] => October 24th, 2009 at 5:21 AM
                )
        )
)
Array
(
    [title] => Second Blog
    [author] => Administrator
    [post] => Testing entry number two
    [entry_date] => Sat, 24 Oct 2009
    [comments] => Array
        (
            [0] => Array
                (
                    [commenter] => Sally Anderson
                    [comments] => comment 1 post 2
                    [comment_date] => October 24th, 2009 at 5:21 AM
                )

            [1] => Array
                (
                    [commenter] => Mike Jones
                    [comments] => comment 2 post 2
                    [comment_date] => October 24th, 2009 at 5:21 AM
                )
        )
)

Ответы [ 2 ]

3 голосов
/ 25 октября 2009

Если предположить, что $rows - это структура в нижней части вашего вопроса (массив массивов), то:

foreach ($rows as $row) {
  echo <<<END
$row[title]<br>
$row[author]<br>
$row[post]<br>
$row[entry_date]<br>
END;
  foreach ($row['comments'] as $comment) {
    echo <<<END
$comment[comments]<br>
$comment[commentor]<br>
$comment[comment_date]<br>
END;
  }
}

Я настоятельно рекомендую вам выбирать значимые имена (например, $comment и $row), а не бессмысленные имена, такие как $val и $val2, так как они могут вызвать путаницу.

Также я использовал heredoc синтаксис в пересмотренной версии, так как я склонен думать, что это может сделать вещи более читабельными, но это необязательно. Лучшая альтернатива может быть:

<?php foreach ($rows as $row): ?>
<?php echo $row['title'] ?><br>
<?php echo $row['post'] ?><br>
<?php echo $row['entry_date'] ?><br>
<?php foreach ($row['comments'] as $comment): ?>
<?php echo $comment['comments'] ?><br>
<?php echo $comment['commentor'] ?><br>
<?php echo $comment['comment_date'] ?><br>
<?php endforeach; ?>
<?php endforeach; ?>

, что может быть полезно, если у вас много HTML-кода. Вышеуказанное переключено на использование альтернативных структур управления , что является необязательным, но часто считается более читабельным в коде этого типа.

Наконец, вы можете короткие теги PHP , что некоторым людям не нравится (либо потому, что они могут быть отключены, либо они взаимодействуют с инструкциями обработки XML), но я обычно предпочитаю:

<? foreach ($rows as $row): ?>
<?= $row['title'] ?><br>
<?= $row['post'] ?><br>
<?= $row['entry_date'] ?><br>
<? foreach ($row['comments'] as $comment): ?>
<?= $comment['comments'] ?><br>
<?= $comment['commentor'] ?><br>
<?= $comment['comment_date'] ?><br>
<? endforeach; ?>
<? endforeach; ?>
0 голосов
/ 25 октября 2009

изменение

foreach($val as $val2)
{
    echo $val['comments'].'<br>';
}

до

foreach($val['comments'] as $val2)
{
    echo $val2['comments'].'<br>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...