7
votes

PHP boucle à travers plusieurs tableaux

ok donc j'ai deux matrices xxx

Je veux pouvoir boucler simultanément à travers ces deux tableaux afin que je puisse faire des comparaisons simples. J'ai examiné à l'aide d'une boucle de forach, mais je ne peux que traiter les informations une matrice à la fois. J'ai également examiné la fusion des tableaux mais je ne peux pas voir l'utilisation dans le faire depuis que j'ai besoin à la fois des clés et des valeurs pour faire les comparaisons. Quelqu'un a-t-il une solution à ce problème? J'apprécie votre temps à avancé.

spécifique sur les comparaisons, je veux quelque chose dans cette mesure xxx

serait-il possible d'utiliser la récursivité vers la boucle au lieu de l'utilisation et de la boucle itérative ?


1 commentaires

Comment voulez-vous utiliser cette comparaison?


8 Réponses :


15
votes

S'ils ont les mêmes clés, vous pouvez simplement faire boucler les touches et les utiliser pour indexer les tableaux en utilisant array_keys : xxx

Si vous êtes inquiet de certaines touches, vous ne pouvez pas essayer (par exemple) array_key_exists ( $ clé, $ array_two) .


1 commentaires

Devrait être foreach, pas pour.



2
votes
$array_one = array('a'=>2,'b'=>1,'c'=>1); 
$array_two = array('a'=>1,'b'=>2,'c'=>1);
$keys = array_keys($array_one);
for($x=0;$x<sizeof($array_one);$x++){
    if($array_one[$keys[$x]] == $array_two[$keys[$x]]) { 
        echo "equal key:".$keys[$x]."\n";
    }
}
output:
equal key:cother one is better lol.

0 commentaires

20
votes
$array_one = array (
    'a' => 2,
    'b' => 1,
    'c' => 1
);
$array_two = array (
    'a' => 1,
    'b' => 2,
    'c' => 1
);


$iterator = new MultipleIterator ();
$iterator->attachIterator (new ArrayIterator ($array_one));
$iterator->attachIterator (new ArrayIterator ($array_two));

foreach ($iterator as $item)
{
    if ($item [0] > $item [1])
    {
        ...
    }
}
It's a little bit superfluous, really, but I see a certain beauty in it. 

3 commentaires

Ceci ... est juste belle ...


J'aime beaucoup le pouvoir des itérateurs de SPL. Ceci s'appelle 'ZIP' dans la programmation fonctionnelle. J'espère que des itérateurs et des utilitaires encore plus impressionnants dans le futur PHP.


J'aime le code facette porno de cela.



1
votes

J'ai regardé à l'aide d'une boucle de forach, mais je ne peux traiter que les informations une matrice à la fois. P>

Si les touches des deux tableaux sont identiques, vous pouvez utiliser Resey (): P>

foreach($array_one as $key => $value)
{
  // do something to the first array
  $array_one[$key] = doSomething($value);

  // do something else to the second array
  $array_two[$key] = doSomethingElse($array_two[$key]);
}

0 commentaires

2
votes

Vous pouvez facilement le faire avec pourcheach. XXX


1 commentaires

cela produirait $ oly_two trois fois



1
votes
/* Make sure the array pointer is in the first position. */
reset($leftarray);
reset($rightarray);

/* Loop through the arrays. */
$i=0;
while ($i < $totalitems)
   {echo current($leftarray)."<br>".
         current($rightarray)."<br>"; 
    next($leftarray);
    next($rightarray);                                                     
    $i=$i+1;
   }

0 commentaires

1
votes
<?php
foreach($array_one as $k => $v)
{
  $result = $v . $array_two[$k];
}
?>

0 commentaires

1
votes

Il peut y avoir de meilleurs moyens, mais cela ira bien à travers les deux tableaux, à l'aide de pourach pour array_one et réinitialiser, ensuite et la touche pour Array_TWO.

$array_one = array('a'=>2,'b'=>1,'c'=>1,'x'=>3,'y'=>4);
$array_two = array('a'=>1,'b'=>2,'c'=>1,'d'=>3,'e'=>8);     

$v2 = reset($array_two);
$k2 = key($array_two);

foreach ($array_one as $k1 => $v1) {
    if ($k1 == $k2 && $v1 == $v2 ) {
        echo "$k1 == $k2 && $v1 == $v2\n";
    } elseif ($k1 == $k2) {
        echo "$k1 == $k2 Keys match\n";
    } elseif ($v1 == $v2) {
        echo "$v1 == $v2 Values match\n";
    } else {
        echo "$k1 $v1  $k2 $v2 No match\n";
    }       
    $v2 = next($array_two);
    $k2 = key($array_two);
}


0 commentaires