用于比较不同数组中元素的PHP函数

时间:2014-10-08 19:24:13

标签: php arrays

我有两个像这样的数组(但是可以有多于或少于2个(任何数量))

[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 个答案:

答案 0 :(得分:1)

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

var_dump($mean);

$mean追加到任意位置。或者你有超过2个阵列?你没有在你的问题中说明。

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);

答案 1 :(得分: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
   }
}

答案 2 :(得分: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];
        }
    }
}
  

$ scores [] = $ scores;

查看示例:) http://codepad.org/upPjMEym