2012-02-07 28 views
7

Bueno por lo que tiene dos matricesphp bucle a través de múltiples matrices

$array_one([a]=>2,[b]=>1,[c]=>1); 
$array_two([a]=>1,[b]=>2,[c]=>1); 

Quiero ser capaz de bucle a través de estas dos matrices simultáneamente para que pueda hacer comparaciones simples. Analicé el uso de un ciclo foreach, pero solo puedo procesar la información una matriz a la vez. También busqué fusionar las matrices, pero no puedo ver el uso al hacer esto, ya que necesito las claves y los valores para hacer las comparaciones. ¿Alguien tiene una solución a este problema? Aprecio tu tiempo en avanzado.

Para ser más específicos en las comparaciones Quiero algo a esta medida

if ($keyone == $keytwo && $valuetwo <= $valueone) 
{ 
    print_r ($array_two); 
} 

¿Sería posible utilizar la recursividad para bucle en lugar de utilizar y bucle iterativo?

+0

¿Cómo desea utilizar esa comparación? – Cheery

Respuesta

15

Si tienen las mismas claves que sólo puede recorrer las llaves y se las utiliza para indexar las matrices usando array_keys:

foreach(array_keys($array_one) as $key) { 
    // do something with $array_one[$key] and $array_two[$key] 
} 

Si usted está preocupado acerca de algunas teclas no existentes puede probar (por ejemplo) array_key_exists($key,$array_two).

+1

debería ser foreach, no para. –

1
$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"; 
    } 
} 

de salida:
clave iguales: c

otro es mejor lol.

17
$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]) 
    { 
     ... 
    } 
} 

Es un poco superflua, de verdad, pero veo una cierta belleza en ella.

+0

+1 para usar SPL –

+0

esto ... es simplemente hermoso ... –

+0

Me gusta mucho el poder de los iteradores de SPL. Esto se llama 'zip' en la programación funcional. Estoy esperando iteradores y utilidades aún más increíbles en el futuro de PHP. – xPheRe

1

Miré usando un bucle foreach pero solo puedo procesar la información una matriz a la vez.

Si las claves en ambas matrices son los mismos, se puede usar foreach():

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]); 
} 
2

Usted fácilmente puede hacerlo con foreach.

$array_one([a]=>2,[b]=>1,[c]=>1); 
$array_two([a]=>1,[b]=>2,[c]=>1); 

foreach($array_one as $array_one_key => $array_one_value) { 
    foreach($array_two as $array_two_key => $array_two_value) { 
     if ($array_one_key == $array_two_key && $array_two_value <= $array_one_value) { 
      print_r ($array_two); 
     } 
    } 
} 
+1

esto produciría $ array_two tres veces – jkdba

1
/* 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; 
    } 
1
<?php 
foreach($array_one as $k => $v) 
{ 
    $result = $v . $array_two[$k]; 
} 
?> 
1

Puede haber mejores maneras, pero esto va a iterar a través de ambas matrices, usando foreach para restablecer array_one y, al lado, y la clave para 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); 
} 
Cuestiones relacionadas