10
votes

Puis-je parcourir deux boucles de taille égale avec pour acheter?

Je suis nouveau à PHP. J'ai deux tableaux $ array1 et $ array2 de la taille égale. J'utilise foreach des boucles à itérer via des tableaux comme suit: xxx

et xxx

mais maintenant J'aimerais parcourir les deux tableaux en même temps afin d'avoir accès aux deux $ Element1 et $ element2 dans le corps de la boucle.

Comment puis-je faire ça?


2 commentaires

Les Keys dans le premier tableau identique à ceux de la seconde? Ce détail dictera la réponse.


Excellent, cela rend cela facile.


5 Réponses :


1
votes

Utilisez A pour boucle à la place ...

for($i = 0;$i<count($array1);$i++) { 
    /* access $array1[$i] and $array2[$i] here */ 
}


3 commentaires

Ne fonctionne que pour les tableaux numériques.


Ce n'est pas foreach Question Puis-je itération à travers deux boucles de taille égale avec pour usure? mais oui, cela fonctionne pour les nums sous forme de clés :)


@ Wh1T3H4CK5, il y a plus de façons d'itération sur un tableau en PHP que pour cuire un chat. Tous peuvent appropriés dans une circonstance donnée.



0
votes

Qu'en est-il de

$i = 0;
foreach($array1 as $element) {

    // Do stuff with the element
    $stuff_from_this_array = $element;
    $stuff_from_other_array = $array2[$i];
    $i++;

}


1 commentaires

Cela rompt lorsque le tableau ne dispose pas de clés séquentielles numériques.



10
votes
foreach (array_combine(array_values($array1), array_values($array2)) as $element1 => $element2) {
  // Do something
}

2 commentaires

Le truc Suivant fonctionnera aussi longtemps qu'il n'y a pas de faux false s dans la première matrice.


Oui, je sais, mais je n'ai pas trouvé de solution (pas si complexe) pour cela. Cependant, j'ai ajouté deux autres façons et au moins une convient :) Le troisième se sent assez gentil avec moi, mais cela a également ses limites.



2
votes

chacun renvoie un tableau contenant la clé et la valeur et avance le pointeur à l'élément suivant. Il retourne false une fois qu'il a passé avancé après le dernier élément.

// Iterate until one of the arrays is complete
while (($a = each($array_a)) !== false && ($b = each($array_b)) !== false) {
    echo "The key:value from array_a is {$a['key']}:{$a['value']}.\n";
    echo "The key:value from array_b is {$b['key']}:{$b['value']}.\n";
}


1 commentaires

... Je n'ai même pas su que je pouvais faire ça! INCROYABLE!!!



0
votes

C'est une solution possible. Si vous commencez par suivant () directement, vous n'obtenez jamais le premier élément de la matrice.

reset($array1); reset($array2);
for ($element1 = current($array1), $element2 = current($array2); 
        $element1 !== false && $element2 !== false; 
        $element1 = next($array1), $element2 = next($array2)) {
    // Do something

}


0 commentaires