2014-10-08 35 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

相關問題