2011-06-12 4 views
1

Est-il possible d'avoir un AND dans une boucle foreach?ET dans une boucle PHP foreach?

Par exemple,

foreach ($bookmarks_latest as $bookmark AND $tags_latest as $tags) 
+0

Je ne vois pas ce genre de situation appellerait cela. Mais tu ne peux pas le faire. Qu'essayez-vous de faire? – Rob

+0

Référez-vous à cette autre question: http://stackoverflow.com/questions/6313340/codeigniter-passing-arguments-from-view-to-controller – ritch

Répondre

3

Vous pouvez toujours utiliser un compteur de boucles pour accéder au même index dans le deuxième tableau que vous accédez à la boucle foreach (j'espère que cela a du sens).

Par exemple: -

$i = 0; 
foreach($bookmarks_latest as $bookmark){ 
    $result['bookmark'] = $bookmark; 
    $result['tag'] = $tags_latest[$i]; 
    $i++; 
} 

Cela devrait permettre d'atteindre ce que vous essayez de faire, sinon utiliser l'approche sugested par dark_charlie.

+0

Merci, c'était juste ce que je cherchais. – ritch

1

Réponse courte: non. Vous pouvez toujours mettre les marque-pages et les étiquettes dans un tableau et parcourir par-dessus.

Ou vous pouvez aussi le faire:

reset($bookmarks_latest); 
reset($tags_latest); 
while ((list(, $bookmark) = each($bookmarks_latest)) && (list(,$tag) = each($tags_latest)) { 
    // Your code here that uses $bookmark and $tag 
} 

EDIT:
L'exemple demandé pour la solution d'un tableau:

class BookmarkWithTag { 
    public var $bookmark; 
    public var $tag; 
} 

// Use the class, fill instances to the array $tagsAndBookmarks 


foreach ($tagsAndBookmarks as $bookmarkWithTag) { 
    $tag = $bookmarkWithTag->tag; 
    $bookmark = $bookmarkWithTag->bookmark; 
} 
+0

Pourriez-vous nous donner un exemple? – ritch

0

vous ne pouvez pas faire cela.

mais vous pouvez

<?php 
foreach($keyval as $key => $val) { 
    // something with $key and $val 
} 

l'exemple ci-dessus fonctionne très bien si vous avez un tableau de type hash mais si vous avez des valeurs imbriquées dans le tableau que je vous recommande:

ou l'option 2

<?php 
foreach ($keyval as $kv) { 
list($val1, $val2, $valn) = $kv; 
} 
0

Non, mais il y a plusieurs façons de le faire, par exemple:

reset($tags_latest); 
foreach ($bookmarks_latest as $bookmark){ 
    $tags = current($tags_latest); next($tags_latest); 
    // here you can use $bookmark and $tags 
} 
0

Non, ce n'est pas le cas.

Vous devrez écrire manuellement une boucle qui utilise des index ou des pointeurs internes pour traverser les deux baies en même temps.

0

Oui, pour être complet:

foreach (array_combine($bookmarks_latest, $tags_latest) as $bookm=>$tag) 

Ce serait la façon native pour obtenir ce que vous voulez. Mais cela ne fonctionne que si les deux tableaux d'entrée ont exactement la même longueur, évidemment.

(aide d'une clé d'itération séparée est l'approche plus courante, cependant.)