2012-02-07 27 views
7

porządku więc mam dwie tablicephp zapętlenie przez wielu tablic

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

Chcę móc pętli obu tych tablic równocześnie, więc mogę dokonać prostych porównań. Spojrzałem na użycie pętli foreach, ale mogę przetwarzać informacje tylko jedną tablicę na raz. Przyjrzałem się także łączeniu tablic, ale nie widzę sensu tego, ponieważ potrzebuję zarówno kluczy, jak i wartości, aby dokonać porównań. czy ktoś ma rozwiązanie tego problemu? Doceniam twój czas na zaawansowanym poziomie.

za szczególne na porównaniach Chcę coś w tym zakresie

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

byłoby możliwe użycie rekurencji do pętli zamiast używania i iteracyjnego pętli?

+0

Jak chcesz użyć tego porównania? – Cheery

Odpowiedz

15

Jeśli mają takie same klucze można po prostu pętli kluczy i używać ich do indeksowania tablic używając array_keys:

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

Jeśli martwisz się o niektórych klawiszy nie istniejących można spróbować (np) array_key_exists($key,$array_two).

+1

Powinien być foreach, nie dla. –

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

wyjściowa:
równa klucz: c

druga jest lepsza 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]) 
    { 
     ... 
    } 
} 

To trochę zbędne, naprawdę, ale widzę w nim pewne piękno.

+0

+1 za używanie SPL –

+0

to ... jest po prostu piękne ... –

+0

Bardzo podoba mi się moc iteratorów SPL. Nazywane jest to "zip" w programowaniu funkcjonalnym. Mam nadzieję na jeszcze więcej niesamowitych iteratorów i narzędzi w przyszłości PHP. – xPheRe

1

Spojrzałem na użycie pętli foreach, ale mogę przetwarzać informacje tylko jedną tablicę na raz.

Jeśli klawisze w obu tablicach są takie same, można użyć 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

można łatwo zrobić z 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

to będzie wyprowadzać $ array_two trzy razy – 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

Nie może być lepsze sposoby, ale to będzie iterację obu tablic, używając foreach dla array_one i reset, obok, a kluczem do 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); 
} 
Powiązane problemy