Cette boucle continuera à la longueur de la plus longue série et retour nulle pour où il n'y a aucun élément correspondant dans l'un des tableaux. Essaye le!
$a = array(1 => "a",25 => "b", 10 => "c",99=>"d");
$b = array(15=>1,5=>2,6=>3);
$ao = new ArrayObject($a);
$bo = new ArrayObject($b);
$ai = $ao->getIterator();
$bi = $bo->getIterator();
for (
$ai->rewind(),$bi->rewind(),$av = $ai->current(),$bv = $bi->current();
list($av,$bv) =
array(
($ai->valid() ? $ai->current() : null),
($bi->valid() ? $bi->current() : null)
),
($ai->valid() || $bi->valid());
($ai->valid() ? $ai->next() : null),($bi->valid() ? $bi->next() : null))
{
echo "\$av = $av\n";
echo "\$bv = $bv\n";
}
Je ne peux pas vraiment dire à partir de la question exactement comment vous voulez traverser les deux tableaux.Pour un foreach
imbriquée vous écrivez simplement
foreach ($myArray as $k => $v) {
foreach ($mySecondArray as $kb => $vb {
}
}
Cependant, vous pouvez faire toutes sortes de choses avec une utilisation créative des fonctions de rappel. Dans ce cas, une fonction anonyme retourne deux éléments de chaque tableau à chaque itération. Il est alors facile d'utiliser la valeur d'itération en tant que tableau ou de la diviser en variables en utilisant list()
comme fait ci-dessous.
Cela a également l'avantage de fonctionner quelle que soit la structure de la clé. Je suis purement basé sur l'ordre des éléments du tableau. Utilisez simplement la fonction de tri appropriée si les éléments sont en panne.
Il ne s'inquiète pas de la longueur des tableaux car il n'y a pas d'erreur signalée, alors assurez-vous de garder un œil sur les valeurs vides.
$a = array("a","b","c");
$b = array(1,2,3);
foreach (
array_map(
create_function(
'$a,$b', 'return array($a,$b);'
)
,$a,$b
)
as $value
)
{
list($a,$b) = $value;
echo "\$a = $a\n";
echo "\$b = $b\n";
}
Sortie
$a = a
$b = 1
$a = b
$b = 2
$a = c
$b = 3
Voici une autre pour vous qui arrête sur l'une des listes de fin. Identique à l'utilisation min(count(a),count(b)
. Utile si vous avez des tableaux de même longueur. Si quelqu'un peut le faire continuer à max(count(a),count(b))
faites le moi savoir.
$ao = new ArrayObject($a);
$bo = new ArrayObject($b);
$ai = $ao->getIterator();
$bi = $bo->getIterator();
for (
$ai->rewind(),$bi->rewind();
$av = $ai->current(),$bv=$bi->current();
$ai->next(),$bi->next())
{
echo "\$av = $av\n";
echo "\$bv = $bv\n";
}
Vous souhaitez donc effectuer une itération des éléments des deux tableaux en même temps? – Gumbo
Voulez-vous quelque chose comme ça (je ne dis pas que c'est un code valide): foreach (categories_stack de $ dans la catégorie de $, page_name de $ en valeur $) { } si les tableaux ont des tailles différentes? – Jamol