Stwosch
Stwosch

Reputation: 642

Foreach in foreach [PHP]

Actually I work with PHP framework Codeigniter and I want to compare value from first foreach to second one, but I'm getting an error. Example here:

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

When I compare $post->id_users inner second foreach I'm getting error, how can I get around this?

Upvotes: 0

Views: 206

Answers (3)

parth
parth

Reputation: 1868

Its better to avoid loop inside a loop

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

    }
}

Upvotes: 1

Ketav
Ketav

Reputation: 770

You should not use $posts->result() and $tags->result() inside foreach loop. Because it will go to check for every time while foreach is live. Overall it decrease the performance of script.

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

Upvotes: 0

Jose M. Llorca
Jose M. Llorca

Reputation: 1

You don't close the second foreach. For eg

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

Upvotes: 0

Related Questions