2015-09-06 81 views
0

我有兩個PHP循環如下:PHP - 使用多個值foreach循環

foreach ($directData as $key => $val) { 
      echo $val; 
      echo "|"; //Just for the visual. 
} 

foreach ($sdata as $key => $val) { 
      echo $val; 
      echo "|"; //Just for the visual. 
} 

哪個輸出:

5|5|5|10|10|10|0|和第二:2|2|2|5|5|5|20|

我的問題是,如何能我將這兩個結果結合起來(添加它們)並像上面那樣打印出來?

所以,這將是:

7|7|7|15|15|15|20 
+0

做陣列具有相同的鑰匙? – splash58

回答

1
php > $a = [1, 2, 3]; 
php > $b = [4, 5, 6]; 
php > $c = array_map(function($x, $y){ return $x + $y; }, $a, $b); 
php > print_r($c); 
Array 
(
    [0] => 5 
    [1] => 7 
    [2] => 9 
) 
php > print_r(implode($c, '|') . '|'); 
5|7|9| 
0

細分各種更好的可讀性,這將總結他們到$new陣列。

array_map將遍歷給定的數組,並將回調函數應用於兩個數組的當前索引處。回調函數將對當前索引的值進行求和。

$new=array_map(
    function(){ 
     return array_sum(func_get_args()); 
    }, 
    $directData, $sdata 
); 

$out= ''; 
foreach ($new as $key => $val) 
    $out .= $val.'|'; 
echo rtrim($out,'|'); 
+0

最後一個字符將會是「|」 .. – Ionut

+0

Ty for spotting it,fixed。 – DeDee

0

如果每個指標在陣列

-1

這裏是我的方法,我希望它爲你的作品相對應。

$i=0; 
$directData=array(5,5,5,10,10,10,0); 
$sdata = array(2,2,2,5,5,5,20); 
foreach ($directData as $key => $val) { 
    $j=0; 
    foreach ($sdata as $key => $val1) { 
      if($i==$j){ 
      $value = $val+$val1; 
      echo $value; 
      echo "|"; //Just for the visual. 

      break; 
      } 
      $j++; 
    } 
$i++; 
} 

如果兩個數組的鍵是一樣那麼我們甚至可以進一步自定義它:

$i=0; 
$directData=array(5,5,5,10,10,10,0); 
$sdata = array(2,2,2,5,5,5,20); 
foreach ($directData as $key => $val) {//this is just for the looping count 
    $value = $directData[$i] + $sdata[$i]; 
    echo $value; 
    echo "|"; //Just for the visual. 
    $i++; 
} 
0
以簡單的方式

,你可以不喜歡它:

$finalData = array_map(function() { 
    return array_sum(func_get_args()); 
}, $directData, $sdata); 
print_r($finalData); 
0

這裏一種使用所有PHP數組所具有的迭代器的方法。

/** 
* Use the iterator that all PHP arrays have. 
* 
* Check both arrays for having entries. 
*/ 

$listOut = array(); // output in here 

while (current($listA) !== false && current($listB) !== false) { 
    $listOut[] = current($listA) + current($listB); 
    next($listA); 
    next($listB); 
} 

輸入:

$listA = array(5, 5, 5, 10, 10, 10, 0); 
$listB = array(2, 2, 2, 5, 5, 5, 20,); 

輸出

Array 
(
    [0] => 7 
    [1] => 7 
    [2] => 7 
    [3] => 15 
    [4] => 15 
    [5] => 15 
    [6] => 20 
) 

7| 7| 7| 15| 15| 15| 20 
+0

爲完整處理數組的方式而添加。 –