2015-12-01 62 views
0

我有一個數組列表中的數字。這裏是我的示例數據:PHP Array保存數據並按其索引計算

Person 1 => 20, 40, 50 
Person 2 => 10, 20, 40 
Person 3 => 20, 20, 30 

我想問一下,如何把自己的分數到一個數組中,並通過其指數計算的呢?我的代碼來創建此數組:

$indeksarr = 1; 
$temparr[$indeksarr] = array(); 
$num = 3; 

while($grade = $query->fetch_array()) <-- basically get score from DB (only return score for each student) 
{ 
    for($i=1; $i <= $num; $i++) 
    { 
     $newdata = array($indeksarr => $grade); 
     $temparr[$indeksarr][] = $newdata; 
     $indeksarr++; 
    } 
} 
for($i=1; $i <= $num; $i++) 
{ 
    print_r($temparr[$i]); 
} 

我的代碼的結果:

Result[1] = 20 
Result[2] = 10 

,我想要的結果:

Result[1] = 50 (<- 20+10+20) <- all from array index 1 
Result[2] = 80 (<- 40+20+20) <- all from array index 2 
Result[3] = 120 (<- 50+40+30) <- all from array index 3 

任何想法來解決我的陣列?

+0

每次迭代中'$ grade'的結果是什麼?意味着它的外觀。 –

+0

就像我的第一個'代碼'Person 1 => 20,40,50 Person 2 => 10,20,40 Person 3 => 20,20,30.它從我的DB返回每個學生的得分 –

+0

這些是逗號分開的值?..是這樣的:在每次迭代或像這樣 'array('Persion 1'=> '20,40,50')''array('Persion 1'=> array(20,40 ,50))? –

回答

2

請嘗試下面的代碼一次,它也可能有助於動態值。

while ($grade = $query->fetch_array()) { 
    //$grdata = explode(",", $grade); // if those are comma separated values 
    $grdata = $grade; 
    for ($j = 0, $k = 1; $j < count($grdata); $j++, $k++) { 
     if (isset($temparr[$k])) { 
      $temparr[$k] = $temparr[$k] + $grdata[$j]; 
     } else { 
      $temparr[$k] = $grdata[$j]; 
     } 
    } 
} 
print_r($temparr); 
+0

得到了邏輯...非常感謝你! –

+0

這是個好朋友...... :) –

0

嘗試:

$result = array(); 
$start_index = 1; 
$stop_index = 3; 
while($grade = $query->fetch_array()) //<-- basically get score from DB (only return score for each student) 
{ 
// grade = array('Person 1' => array(20,10,20)); 
    $values = array_values($grade); 
    $result[$start_index] = array_sum($values[0]); 

    if ($start_index == $stop_index) break; // stop when it reach stop_index 
    $start_index++; 
} 

echo "<pre>"; 
print_r($result); 
echo "</pre>"; 
die; 
0

biuld陣列如下面

$persons = array('Person1'=>array(20,40,50),'Person2' => array(10, 20, 40),'Person3' => array(20, 20, 30)); 

//than perform below function 

$array_sum = array_reduce($persons,"abb"); 
    function abb($a,$b) 
{ 
    foreach($b as $key=>$value) 
    { 
     if(isset($a[$key])) 
     $a[$key] += $value; 
     else 
     $a[$key] = $value; 
    } 
    return $a; 
} 

var_dump($array_sum); 

O/P

array (size=3) 
    0 => int 50 
    1 => int 80 
    2 => int 120 
0

下面是使用array_walkarray_sum一個簡單的替代:

$subTotal = [[0,0,0],[0,0,0],[0,0,0]]; 
$line = 0; 

function walk($item, $key) { 
    global $subTotal; 
    global $line; 
    $subTotal[$key][$line] = $item; 
} 

$array = [ 
    [20, 40, 50], 
    [10, 20, 40], 
    [20, 20, 30] 
]; 
$finalArray = []; 

array_walk($array[0], 'walk'); 
$line = 1; 

array_walk($array[1], 'walk'); 
$line = 2; 

array_walk($array[2], 'walk'); 

$finalArray[] = array_sum($subTotal[0]); 
$finalArray[] = array_sum($subTotal[1]); 
$finalArray[] = array_sum($subTotal[2]); 

// Will print '50, 80, 120, ' 
foreach($finalArray as $total) { 
    echo $total.', '; 
} 

希望這有助於!