2014-10-08 37 views
0

我有两个阵列,像这样(但是可以有多于或少于2(任何量))比较 PHP功能:为元素不同阵列中

[0] => Array 
    (
     [assessedUsers] => Array 
      (
       [0] => Array 
        (
         [scores] => Array 
          (
           [0] => 10 
           [1] => 10 
           [2] => 10 
           [3] => 10 
          ) 

        ) 

       [1] => Array 
        (
         [scores] => Array 
          (
           [0] => 9 
           [1] => 10 
           [2] => 0 
           [3] => 9 
          ) 

        ) 
      ) 
    ) 

凡评分数组的长度是在两个阵列中总是一样的。

我想从每个数组中逐个取出每个元素,并对它们进行平均,然后将它们追加到一个新数组中。

例如,我需要的功能的输出是这样的:

[1] => Array 
    (
     [scores] => Array 
      (
       [0] => 9.5 
       [1] => 10 
       [2] => 5 
       [3] => 9.5 
      ) 

    ) 

是否有能做到这一点的函数,或者我需要嵌套循环for()一对夫妇?如果我需要使用for l循环,我该怎么做呢?我对它背后的逻辑有点困惑。

目前我有什么是:

for ($i = 0; $i < sizeof($data["assessedUsers"]); $i++) { 
    for ($j = 0; $j < sizeof($data["assessedUsers"][$i]["scores"]); $j++) { 

    } 
} 

,我以什么来有点困惑下一步去哪里。提前致谢!

+3

你需要一些循环。 – 2014-10-08 19:25:52

+0

你有两个数组还是可能有更多? – Cheery 2014-10-08 19:45:08

+0

有可能会更多。 – php 2014-10-08 19:47:11

回答

0

大概两个循环:

$newarray(); 

foreach($main_array as $user) { 
    foreach($user['assessedUser'][0]['scores'] as $score_key => $user0_value) { 
      $user1_value = $user['assessedUser'][1]['scores'][$score_key]; 
      $average = ($user1_value + $user0_value)/2; 
      ... stuff into new array 
    } 
} 
+0

会有两个以上的数组。我不知道这个长度是多少。 – php 2014-10-08 19:48:55

1
$mean = array_map(function($a, $b) { return ($a + $b)/2; }, 
      $data['assessedUsers'][0]['scores'], 
      $data['assessedUsers'][1]['scores'] 
     ); 

var_dump($mean); 

和追加$mean任何你想要的。或者你有两个以上的数组?你没有在你的问题中说明。

PS:对于任何数量的子阵列

$arr = array(
    array('scores' => array(10,10,10,10)), 
    array('scores' => array(9,10,0,9)), 
    array('scores' => array(1,2,3,4)) 
); 

// remove arrays from the key 
$tmp = call_user_func_array(function() { return func_get_args(); }, 
    array_map(function($a) { return $a['scores']; }, $arr) 
); 

// add arrays by each element 
$mean = array_map(function($val, $ind) use($tmp) { 
    $sum = 0; 
    foreach($tmp as $i => $t) 
     $sum += $t[$ind]; 
    return $sum/($i + 1); 
}, $tmp[0], array_keys($tmp[0])); 

var_dump($mean); 
+0

500内部服务器错误 – php 2014-10-08 19:46:49

+0

@php没有500 ..只有当你使用一个非常古老的PHP。你有什么版本? – Cheery 2014-10-08 19:47:29

+0

也可以有两个以上的数组。 – php 2014-10-08 19:47:52

0

我对你的解决方案,希望这有助于:)

$scores = array(); 

for ($i = 0; $i < sizeof($data["assessedUsers"]); $i++) {  
    for ($j = 0; $j < sizeof($data["assessedUsers"][$i]["scores"]); $j++) { 
     if(isset($scores[$j])){ 
      $scores[$j] = ($scores[$j] + $data["assessedUsers"][$i]["scores"][$j])/($i +1); 
     }else{ 
      $scores[] = $data["assessedUsers"][$i]["scores"][$j]; 
     } 
    } 
} 

$得分[] = $得分;

视图实例:) http://codepad.org/upPjMEym

+0

500内部服务器错误。我不认为其中一些是合适的PHP语法。 – php 2014-10-08 19:43:38

+0

检查**数组(); **或**数组()**检查更新答案 – HoangHieu 2014-10-08 19:44:36

+0

很确定它不仅应该是'$ scores = array();'但它不应该是'$ scores [ ]',因为我仍然收到500内部服务器错误。 – php 2014-10-08 19:45:53

相关问题