2013-04-23 3 views
0

Позвольте мне показать мой код первой: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 возвращает только одну запись. Я не могу распознать ошибку.

ответ

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

Изменить

<?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)).'">'; 

Ваш цикл по каждому элементу является присвоение нового значения каждый раз, когда вы зацикливание. Вам нужно инициализировать переменную $ output и затем объединить ее.

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

Это логическая ошибка. return инструкция завершает цикл на самой первой итерации.

Голые кости вашего кода:

foreach ($somethings as $something) { 
    // first iteration has begun 
    doSomethingWith($something); // done 
    return $something; // done, quite the loop 
} 
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; 
Смежные вопросы