2010-11-11 11 views
28

¿Es posible tener un bucle foreach en PHP con múltiples variables de "índice", similar al siguiente (que no usa la sintaxis correcta)?Variables de índice múltiple en el bucle foreach de PHP

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

Si no, ¿hay una buena manera de conseguir el mismo resultado?

+0

Es posible que desee aclarar. ¿Estás tratando de recorrer una matriz 2D o 2 matrices? – Jere

+1

¿No estoy seguro de cómo funcionaría esto? ¿Puedes explicar un poco más lo que estás haciendo? Podría tener un foreach anidado o combinar la matriz antes de la iteración.Háganos saber lo que está tratando de hacer y podemos ayudarlo a hacerlo. –

Respuesta

40

a lograr precisamente ese resultado que podría hacer

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

pero que sólo funciona para dos matrices

+4

Nota; si '$ courses' son objetos, esto no funcionará. – Dan

+4

Nota; si '$ courses' son cadenas numéricas, se convertirán en enteros. – hakre

+0

Espero no resucitar un hilo que esté demasiado muerto. Pero, estoy tratando de lograr lo mismo, lo tuve por un segundo, pero no creo que funcionó, pero no lo hizo, pero por mi vida no puedo recordar el código que puse. Estoy tratando de que la categoría y el valor entren en la base de datos. \t foreach ($ _ POST ['categoría'] como $ i => $ categoría) \t { \t // Obtenga los valores de la publicación. \t $ category = mysql_real_escape_string ($ category); \t $ value = mysql_real_escape_string ($ _ POST ['value'] [$ i]); – Spartacus38

12

Si tanto los arreglos son del mismo tamaño que puede utilizar un bucle for como:

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

Usted tendría que usar bucles anidados como esto:

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

Por supuesto, esta voluntad recorra cada sección para cada curso.

Si desea buscar en cada par, que es mejor usar cualquiera de los objetos que contienen los cursos pares/sección y bucles sobre aquellos, o asegurarse de que los índices son los mismos y haciendo:

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

¿Qué haría eso, exactamente? ¿Son $courses y $sections solo dos matrices separadas, y desea realizar la misma función para los valores en cada una? Siempre se puede hacer:

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

Esto hace que todos los supuestos habituales sobre array_merge, por supuesto.

¿O es que $sections viene de $course y quiere hacer algo para cada sección en cada curso?

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

así?

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

} 
2

No, porque esas matrices pueden tener otra serie de artículos.

Debe explícitamente escribir algo así:

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

    //here the code you wanted before 
} 
+1

pre-ejecute su código '$ i zzzzBov

+1

Trabajo con proyectos muy grandes que funcionan con mucha carga y, en general, realmente no importa porque la consulta SQL individual es 1000 más lenta que la cuenta php :). Y si tiene que trabajar con matrices MUY grandes, entonces hay algo mal con el diseño de la aplicación. – Daimon

2

No, esto es tal vez uno de los raros casos cursores array de PHP son útiles:

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/>"; 
} 
?> 

o 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/>"; 
} 
?> 
Cuestiones relacionadas