PHP - 使用多个值foreach循环

PHP - 使用多个值foreach循环

问题描述:

我有两个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

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| 

细分各种更好的可读性,这将总结他们到$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

如果每个指标在阵列

这里是我的方法,我希望它为你的作品相对应。

$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++; 
} 

以简单的方式

,你可以不喜欢它:

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

这里一种使用所有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

为完整处理数组的方式而添加。 –