Foreach循环显示一个条目

时间:2013-04-23 04:26:48

标签: php foreach

让我先显示我的代码:

第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部分只返回一个条目。我无法识别错误。

5 个答案:

答案 0 :(得分:3)

更改

<?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变量然后连接它。

答案 1 :(得分:3)

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

代码的基础是:

foreach ($somethings as $something) {
  // first iteration has begun
  doSomethingWith($something); // done
  return $something; // done, quite the loop
}

答案 2 :(得分:2)

$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调用应该在循环之外

答案 3 :(得分:2)

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

试试这段代码。

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

答案 4 :(得分:1)

试试此代码

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