2012-02-07 187 views
7

好循環,所以我有兩個數組PHP通過多個陣列

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

我希望能夠循環通過這兩個陣列的同時使我可以做簡單比較。我看着使用foreach循環,但我一次只能處理一個數組的信息。我也考慮過合併數組,但是我看不到這樣做的用處,因爲我需要鍵和值來進行比較。有沒有人有解決這個問題的辦法?我很欣賞你的高級時間。

要具體到我想要的東西攀比到這個程度

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

是否可以使用遞歸循環,而不是使用和迭代循環?

+0

您想如何使用該比較? – Cheery 2012-02-07 05:49:55

回答

15

如果他們有相同的鍵就可以使用array_keys只是通過按鍵循環,並利用它們來索引數組:

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

如果你擔心某些鍵不存在,你可以嘗試(例如) array_key_exists($key,$array_two)

+1

應該是foreach,而不是。 – 2015-01-12 02:35:47

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

輸出:
等於鍵:C

另一個是更好洛爾。

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

這有點多餘,真的,但我看到它有一定的美感。

+0

+1對於使用SPL – 2013-02-06 23:23:10

+0

這個......只是很美... – 2014-07-05 08:57:10

+0

我真的很喜歡SPL迭代器的威力。這在函數式編程中被稱爲「zip」。我希望PHP未來能夠提供更棒的迭代器和實用程序。 – xPheRe 2014-08-13 14:48:25

1

我看着使用foreach循環,但我一次只能處理一個數組的信息。

如果兩個數組鍵是一樣的,你可以使用的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

您可以輕鬆地用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

雖然這會輸出$ array_two三次 – jkdba 2012-02-07 06:18:09

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

可能有更好的方法,但是這將通過兩個數組迭代,使用的foreach爲array_one和復位,接下來,和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); 
}