2010-11-11 10 views
28

Est-il possible d'avoir une boucle foreach en PHP avec plusieurs variables "index", semblable à ce qui suit (qui n'utilise pas la bonne syntaxe)?Plusieurs variables d'index dans PHP foreach loop

foreach ($courses as $course, $sections as $section) 

Sinon, y a-t-il un bon moyen d'obtenir le même résultat?

+0

Vous pourriez vouloir clarifier. Essayez-vous de parcourir un tableau 2D ou deux tableaux? – Jere

+1

Vous ne savez pas comment cela fonctionnerait? Pouvez-vous expliquer un peu plus ce que vous faites? Vous pouvez avoir un foreach imbriqué ou combiner le tableau avant l'itération.Faites-nous savoir ce que vous essayez de faire et nous pouvons vous aider à le faire. –

Répondre

40

pour atteindre ce résultat juste que vous pourriez faire

foreach (array_combine($courses, $sections) as $course => $section) 

mais qui ne fonctionne que pour les deux tableaux

+4

Note; Si '$ courses' est un objet, cela ne fonctionnera pas. – Dan

+4

Remarque: Si '$ courses' est une chaîne de caractères numériques, ils seront transformés en entiers. – hakre

+0

J'espère que je ne ressourcerai pas un fil qui est trop mort. Mais, j'essaie de réaliser la même chose, j'ai eu une seconde, mais je ne pense pas que cela a fonctionné, mais il didn, mais pour la vie de moi ne me souviens pas du code que j'ai mis po Je suis essayer d'avoir la catégorie et la valeur vont dans la base de données. \t foreach ($ _ POST ['category'] comme $ i => $ category) \t { \t // Récupère les valeurs de la publication. \t $ category = Chaîne mysql_real_escape ($ category); \t $ value = mysql_real_escape_string ($ _ POST ['valeur'] [$ i]); – Spartacus38

12

Si les deux tableaux sont de la même taille, vous pouvez utiliser une boucle for comme:

for($i=0, $count = count($courses);$i<$count;$i++) { 
$course = $courses[$i]; 
$section = $sections[$i]; 
} 
4

Vous devez utiliser des boucles imbriquées comme ceci:

foreach($courses as $course) 
{ 
    foreach($sections as $section) 
    { 
    } 
} 

Bien sûr, cela boucle sur chaque section pour chaque cours.

Si vous voulez regarder chaque paire, vous feriez mieux d'utiliser soit des objets qui contiennent les cours/paires de section et en boucle sur ceux-ci, ou en vérifiant que les index sont les mêmes et faire:

foreach($courses as $key => $course) 
{ 
    $section = $sections[$key]; 
} 
1

Qu'est-ce que cela ferait, exactement? $courses et $sections sont juste deux tableaux séparés, et vous voulez effectuer la même fonction pour les valeurs dans chacun? Vous pouvez toujours faire:

foreach(array_merge($courses, $sections) as $thing) { ... } 

Cela rend toutes les hypothèses habituelles sur array_merge, bien sûr.

Ou est-ce que $sections vient de $course et que vous voulez faire quelque chose pour chaque section dans chaque cours?

foreach($courses as $course) { 
    foreach($sections as $section) { 
     // Here ya go 
    } 
} 
0

comme ça?

foreach($array as $b=>$c){ 

} 
2

Non, car ces tableaux peuvent contenir un autre nombre d'éléments.

Vous devez explicitement écrire quelque chose comme ça:

for ($i = 0; $i < count($courses) && $i < count($sections); ++$i) { 
    $course = $courses[$i]; 
    $section = $sections[$i]; 

    //here the code you wanted before 
} 
+1

pré-exécutez votre code '$ i zzzzBov

+1

Je travaille avec des projets très volumineux qui fonctionnent sous forte charge et généralement cela n'a pas vraiment d'importance car une seule requête SQL est 1000 plus lente que le nombre de php :). Et si vous devez travailler avec de très grandes baies, il y a quelque chose qui ne va pas avec la conception de l'application. – Daimon

2

Non, cela est peut-être l'un des rares cas de curseurs de tableau de PHP sont utiles:

reset($sections); 
foreach ($courses as $course) 
{ 
list($section) = each($sections); 
} 
3

TRY -

1)

<?php 
$FirstArray = array('a', 'b', 'c', 'd'); 
$SecondArray = array('1', '2', '3', '4'); 

foreach($FirstArray as $index => $value) { 
    echo $FirstArray[$index].$SecondArray[$index]; 
    echo "<br/>"; 
} 
?> 

ou 2)

<?php 
$FirstArray = array('a', 'b', 'c', 'd'); 
$SecondArray = array('1', '2', '3', '4'); 

for ($index = 0 ; $index < count($FirstArray); $index ++) { 
    echo $FirstArray[$index] . $SecondArray[$index]; 
    echo "<br/>"; 
} 
?>