variable template set_query_var pass parts part get_template_part get_template espaƱol php arrays foreach

php - template - Pasar dos variables en un bucle ''foreach''



wordpress set_query_var (6)

Esta es una de las formas de hacer esto:

foreach ($specs as $k => $name) { assert(isset($material[$k])); $mat = $material[$k]; }

Si tiene [''foo'', ''bar''] y [2 => ''mat1'', 3 => ''mat2''] entonces este enfoque no funcionará pero puede usar array_values para descartar claves primero.

Otra aplicación sería (que está muy cerca de lo que quería, de hecho):

while ((list($name) = each($specs)) && (list($mat) = each($material))) { }

Esto terminará cuando uno de ellos finalice y funcionará si no se indexan de la misma manera. Sin embargo, si se supone que deben ser indexados de la misma manera, tal vez la solución anterior sea mejor. Difícil de decir en general.

Necesito ayuda con respecto a un bucle foreach() . ¿Puedo pasar dos variables en un ciclo foreach ?

Por ejemplo,

foreach($specs as $name, $material as $mat) { echo $name; echo $mat; }

Aquí, $specs y $material no son más que una matriz en la que estoy almacenando alguna especificación y nombre de material y quiero imprimirlos uno por uno. Recibo el siguiente error después de ejecutar:

Error de análisis: error de sintaxis, inesperado '','', esperando '')'' en la línea foreach.


Puede usar el MultipleIterator de SPL. Es un poco detallado para este caso de uso simple, pero funciona bien con todos los casos extremos:

$iterator = new MultipleIterator(); $iterator->attachIterator(new ArrayIterator($specs)); $iterator->attachIterator(new ArrayIterator($material)); foreach ($iterator as $current) { $name = $current[0]; $mat = $current[1]; }

La configuración predeterminada del iterador es que se detiene tan pronto como una de las matrices no tiene más elementos y que puede acceder a los elementos actuales con una tecla numérica, en el orden en que se han adjuntado los iteradores ( $current[0] y $current[1] ).

Los ejemplos de las diferentes configuraciones se pueden encontrar en la documentación del constructor .


En el principio, fue el For Loop:

$n = sizeof($name); for ($i=0; i < $n; $i++) { echo $name[$i]; echo $mat[$i]; }


Hazlo usando un bucle for ...

Verifíquelo a continuación:

<?php $specs = array(''a'', ''b'', ''c'', ''d''); $material = array(''x'', ''y'', ''z''); $count = count($specs) > count($material) ? count($specs) : count($material); for ($i=0;$i<$count;$i++ ) { if (isset($specs[$i])) echo $specs[$i]; if (isset($material[$i])) echo $material[$i]; } ?>

SALIDA

axbyczd


No puede tener dos matrices en un bucle foreach como ese, pero puede usar array_combine para combinar una matriz y luego simplemente imprimirla:

$arraye = array_combine($name, $material); foreach ($arraye as $k=> $a) { echo $k. '' ''. $a ; }

Salida :

first 112 second 332

Pero si alguno de los nombres no tiene material, debe tener un valor vacío / nulo, de lo contrario, no hay forma de que pueda asegurarse qué material pertenece a qué nombre. Entonces creo que deberías tener una matriz como esta:

$name = array(''amy'',''john'',''morris'',''rahul''); $material = array(''1w'',''4fr'',null,''ff'');

Ahora puedes simplemente

if (count($name) == count($material)) { for ($i=0; $i < $count($name); $i++) { echo $name[$i]; echo $material[$i]; }

Solo para tu información: si quieres tener múltiples matrices en foreach , puedes usar list :

foreach ($array as list($arr1, $arr2)) {...}

Aunque primero debes hacer esto: $array = array($specs,$material)

<?php $abc = array(''first'',''second''); $add = array(''112'',''332''); $array = array($abc,$add); foreach ($array as list($arr1, $arr2)) { echo $arr1; echo $arr2; }

El resultado será:

first second 112 332

Y aún así no creo que sirva para su propósito exacto, ya que pasa por el primer conjunto y luego el segundo conjunto.


Simplemente use un bucle for . Y dentro de ese bucle, extrae los valores de tu matriz:

For (I=0 to 100) { Echo array1[i]; Echo array2[i] }