2016-09-15 12 views
0

Eigentlich arbeite ich mit PHP-Framework-Codeigniter und ich möchte Wert von ersten foreach zu zweitem vergleichen, aber ich bekomme einen Fehler. Beispiel hier: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; ?> 

Wenn ich $post->id_users vergleichen inneren zweiten foreach Ich erhalte Fehler, wie kann ich dieses Problem umgehen?

+1

Fügen Sie eine weitere Schließung geschweiften Klammern nach dem if-Block. – Tpojka

+0

Okay, Sie erhalten einen Fehler - aber was genau ist dieser Fehler? Sie müssen es in Ihre Frage aufnehmen. – Qirel

+0

Sie sollten die normale und alternative Syntax nicht so mischen. Benutze entweder das eine oder das andere. Wenn Sie beide verwenden, wird Ihr Code schwer lesbar. – Mike

Antwort

0

Sie schließen nicht die zweite foreach. Für zB

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

Sie sollten nicht $posts->result() und $tags->result() innerhalb foreach-Schleife verwenden. Weil es jedes Mal nachsehen wird, wenn foreach live ist. Insgesamt verringert es die Leistung des Skripts.

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

Es ist besser zu vermeiden Schleife in einer Schleife

$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)) { 

    } 
}