2016-09-15 6 views
0

На самом деле я работаю с фреймворком PHP Codeigniter, и я хочу сравнить значение с первого foreach со вторым, но я получаю сообщение об ошибке. Пример здесь:Foreach in foreach [PHP]

<?php foreach($posts->result() as $post): ?> 

    (html content) 

    <?php foreach($tags->result() as $tag) { 
     if($tag->id_users == $post->id_users) echo $tag->tag_name; 
    } ?> 

    (html content) 

<?php endforeach; ?> 

Когда я сравниваю $post->id_users внутренний второй foreach я получаю сообщение об ошибке, как я могу обойти эту проблему?

+1

Добавить еще один закрывающие фигурные скобки после, если блок. – Tpojka

+0

Хорошо, вы получаете сообщение об ошибке - но что это за ошибка? Вы должны включить его в свой вопрос. – Qirel

+0

Вам не следует смешивать обычные и альтернативные синтаксисы. Либо используйте тот или другой. Использование обоих делает ваш код трудным для чтения. – Mike

ответ

0

Вы не закрываете второй прогон. Для например

<?php foreach($posts->result() as $post): ?> foreach1 

    (...some html) 

    <?php foreach($tags->result() as $tag) { if($tag->id_users == $post->id_users) echo $tag->tag_name; } ?> //foreach2 

     (...some html) 

    <?php endforeach; ?> 

<?php endforeach; ?> 
0

Вы не должны использовать $posts->result() и $tags->result() внутри цикла Еогеасп. Потому что он будет проверяться каждый раз, когда foreach жив. В целом это снижает производительность скрипта.

<?php 
$posts = $posts->result(); 
$tags = $tags->result(); 

foreach($posts as $post) { 
?> 
    << Other HTML code goes here >> 
    <?php 
    foreach($tags as $tag) { 
     if($tag->id_users == $post->id_users) { 
      echo $tag->tag_name; 
     } 
    ?> 
     << Other HTML code >> 
    <?php 
    } 
} 
1

лучше, чтобы избежать петли внутри цикла

$tag_ids = array(); 
foreach($tags->result() as $tag) { 
    $tag_ids[] = $tag->id_users; 
} 

foreach ($posts->result() as $key => $post) { 
    if(in_array($post->id_users, $tag_ids)) { 

    } 
}