Foreach循环显示一个一个条目


Foreach loop is displaying one one entry

让我先展示我的代码:

第1部分

<?php foreach($entries['items'] as $entry) : ?>
    <audio preload="none" title="<?php echo $entry->title; ?>" data-date="<?php echo date("M d Y",strtotime($entry->pubDate)); ?>">
        <?php if ( $entry->url != "" ) { ?>
            <source src="<?php echo $entry->url; ?>" type="audio/mpeg" />
        <?php } else { ?>
            <source src="<?php echo $entry->guid; ?>" type="audio/mpeg" />
        <?php } ?>
            <!-- <source src="ogg_version.ogg" type="audio/ogg" /> -->
    </audio>
<?php endforeach; ?>

第2部分

<?php
foreach($entries['items'] as $entry) {
    $output = '<audio preload="none" title="'.$entry->title.'" data-date="'.date("M d Y",strtotime($entry->pubDate)).'">';
    if ( $entry->url != "" ) {
    $output .= '<source src="'.$entry->url.'" type="audio/mpeg" />';
    } else { 
    $output .= '<source src="'.$entry->guid.'" type="audio/mpeg" />';
    }
    $output .= '</audio>';
    return $output;
}

第1部分可以,但第2部分只返回一个条目。我认不出这个错误。

更改

<?php
    foreach($entries['items'] as $entry) {
    $output = '<audio preload="none" title="'.$entry->title.'" data-date="'.date("M d Y",strtotime($entry->pubDate)).'">';

到这个

<?php
$output = "";
foreach($entries['items'] as $entry) {
  $output.= '<audio preload="none" title="'.$entry->title.'" data-date="'.date("M d Y",strtotime($entry->pubDate)).'">';

每次循环时,foreach循环都会分配新的值。您需要初始化$output变量,然后将其连接。

这是一个逻辑错误。return指令在第一次迭代时退出循环。

代码的基本内容是:

foreach ($somethings as $something) {
  // first iteration has begun
  doSomethingWith($something); // done
  return $something; // done, quite the loop
}
$output = '<audio preload="none" title="'.$entry->title.'" data-date="'.date("M d Y",strtotime($entry->pubDate)).'">';

应该是

$output. = '<audio preload="none" title="'.$entry->title.'" data-date="'.date("M d Y",strtotime($entry->pubDate)).'">';

并且return调用应该在循环之外

您已经从循环中返回了值。这将不允许循环第二次执行。

试试这个代码。

<?php
$output='';
foreach($entries['items'] as $entry) {
    $output .= '<audio preload="none" title="'.$entry->title.'" data-date="'.date("M d Y",strtotime($entry->pubDate)).'">';
    if ( $entry->url != "" ) {
    $output .= '<source src="'.$entry->url.'" type="audio/mpeg" />';
    } else { 
    $output .= '<source src="'.$entry->guid.'" type="audio/mpeg" />';
    }
    $output .= '</audio>';
}
return $output;

试试这个代码

<?php
$output='';
foreach($entries['items'] as $entry) {
    $output .= '<audio preload="none" title="'.$entry->title.'" data-date="'.date("M d Y",strtotime($entry->pubDate)).'">';
    if ( $entry->url != "" ) {
    $output .= '<source src="'.$entry->url.'" type="audio/mpeg" />';
    } else { 
    $output .= '<source src="'.$entry->guid.'" type="audio/mpeg" />';
    }
    $output .= '</audio>';
}
 return $output;