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