Ben istiyorum sonuçlar üretecek bir foreach yazmak nasıl

2 Cevap

Ben bir dizi dışarı doğru veri almak zor bir zaman yaşıyorum. İç içe foreach döngü yazdı ama iç döngü hatası "foreach () için sağlanan geçersiz argüman" atıyor. Birisi bana bu konuda yardım edebilir misiniz? Teşekkürler.

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 Cevap

$rows ardından soru (diziler dizisi) alt yapısı olduğunu varsayarak:

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

Ben şiddetle bu sadece gidiş olarak yerine $val ve $val2 gibi anlamsız isimlerle daha ({[) (1]} {[) 0 (]} gibi ve) anlamlı isimler seçmenizi öneririz karışıklığa neden.

Ben çok daha okunabilir şeyler yapabilirsiniz düşünmek eğilimindedir, ancak bu isteğe bağlı olduğu gibi, aynı zamanda ben revize sürümü heredoc syntax kullandım. Daha iyi bir alternatif olabilir:

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

hangi serpiştirilmiş HTML bir sürü var yararlı olabilir. Yukarıdaki isteğe bağlıdır, ancak genellikle kod bu tür daha çok okunabilir kabul edilir, alternative control structures kullanarak açık.

Son olarak, bazı insanlar sevmiyorum ki, PHP short tags olabilir (onlar devre dışı bırakılmış olabilir veya XML işleme talimatları ile arayüzü ya çünkü) ama ben genelde tercihim:

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

değişim

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

karşı

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