2014-06-16 155 views
0

我正在開發包含名稱和分數列的排名表。還有一個額外的列僅用於顯示Total,這是所有分數的總和。總和數組值

我正在使用array_sum並從$scores數組中提取信息,其中組織值。即使總和工作正常,它只會返回方括號中指定名稱的值。即:array_sum($scores["Mike"])爲循環中的每一行打印37)。另一方面,如果我只使用array_sum($scores),它會爲循環中的每一行輸出0!我需要每個名字正確的總和到數組中。

以下是我有:

//scores values for each name 
$scores = array(
    "Mike" => array(04, 03, 00, 07, 04, 07, 00, 01, 00, 07, 04), 
    "Kyle" => array(07, 01, 00, 03, 04, 01, 00, 07, 03, 04, 04), 
    "Johnny" => array(07, 07, 00, 03, 00, 04, 00, 01, 01, 04, 03), 
    "Will" => array(03, 04, 00, 03, 04, 07, 00, 01, 00, 07, 04), 
    "Vasques" => array(03, 01, 00, 03, 04, 07, 00, 01, 00, 07, 07) 
); 

//start loop for rows 
foreach($scores as $key=>$value) { 
    echo "<tr>"; 
    //column for the names 
    echo "<td>$key</td>"; 
    //Total Column 
    echo "<td class='total' align='center' valign='middle'>" . array_sum($scores["Mike"]) . "</td>"; 
    //loop for columns where the score should be displayed 
    for($x=0; $x<count($value); $x++) { 
    echo "<td class='games tip' align='center' valign='middle'>".sprintf('%02d', $value[$x])."</td>"; 
    } 
    echo "</tr>"; 
} 

應該是這樣顯示的東西:

Mike 37 04 03 00 07 04 07 00 01 00 07 04 
Kyle 34 07 01 00 03 04 01 00 07 03 04 04 
Johnny 33 03 01 00 03 04 07 00 01 00 07 07 

等等...... 37,34和33的總和。

+3

'array_sum($分數[ 「邁克」])'應'array_sum($值)' - 此外,請注意,您的前導0告訴PHP數字是八進制數,00到07是相同的,但08和09是無效的,而010與十進制數是9相同。 – scragar

回答

0

改變這一行:

echo "<td class='total' align='center' valign='middle'>" . array_sum($value) . "</td>"; 

你需要總結你的$value變種,而不是Mike鍵。

正如OP所質疑的,這可以用來排序數組。 在你的foreach循環之前添加這個。

function cmp($a, $b) { 
    return array_sum($b) - array_sum($a); 
} 
uasort($scores, "cmp"); 
+0

傻傻的我!當然,它應該是'$價值'!每當我絕望時,我應該學會停止吸引堆棧溢出!哈哈哈謝謝!我有一個額外的問題!是否有可能從最高值到最低值? –

+0

而不是立即通過html顯示值,將計算值拉入數組,然後使用array_sort()http://www.php.net//manual/en/array.sorting.php – VikingBlooded

+0

@CaioFerrari我已更新我的回答,請查看 –

0

試圖改變array_sum($scores["Mike"])array_sum($scores[$key])並添加<table></table>標籤

$scores = array(
    "Mike" => array(04, 03, 00, 07, 04, 07, 00, 01, 00, 07, 04), 
    "Kyle" => array(07, 01, 00, 03, 04, 01, 00, 07, 03, 04, 04), 
    "Johnny" => array(07, 07, 00, 03, 00, 04, 00, 01, 01, 04, 03), 
    "Will" => array(03, 04, 00, 03, 04, 07, 00, 01, 00, 07, 04), 
    "Vasques" => array(03, 01, 00, 03, 04, 07, 00, 01, 00, 07, 07) 
); 
echo '<table>'; 
//start loop for rows 
foreach($scores as $key=>$value) { 
    echo "<tr>"; 
    //column for the names 
    echo "<td>$key</td>"; 
    //Total Column 
    echo "<td class='total' align='center' valign='middle'>" . array_sum($scores[$key]) . "</td>"; 
    //loop for columns where the score should be displayed 
    for($x=0; $x<count($value); $x++) { 
    echo "<td class='games tip' align='center' valign='middle'>".sprintf('%02d', $value[$x])."</td>"; 
    } 
    echo "</tr>"; 
} 
echo '</table>'; 

輸出: -

Mike 37 04 03 00 07 04 07 00 01 00 07 04 
Kyle 34 07 01 00 03 04 01 00 07 03 04 04 
Johnny 30 07 07 00 03 00 04 00 01 01 04 03 
Will 33 03 04 00 03 04 07 00 01 00 07 04 
Vasques 33 03 01 00 03 04 07 00 01 00 07 07 
+0

幾乎就是這樣!我得到'array_sum($ value)'應該是正確的方法!不管怎麼說,還是要謝謝你! –

0

排序多維數組可以用 「在array_multisort」 與SORT_ASC或SORT_DESC常數參數