3 回答

TA貢獻1770條經(jīng)驗 獲得超3個贊
您需要將其與之耦合以array_map()首先選擇該f_count列:
array_sum(array_map(function($item) {
return $item['f_count'];
}, $arr));
當然,在內(nèi)部,這會執(zhí)行一個雙循環(huán)。只是您在代碼中看不到它。您可以array_reduce()用來擺脫一個循環(huán):
array_reduce($arr, function(&$res, $item) {
return $res + $item['f_count'];
}, 0);
但是,如果速度是唯一的利益,那么速度foreach仍然最快:
$sum = 0;
foreach ($arr as $item) {
$sum += $item['f_count'];
}
這要歸功于您使用的變量的“局部性”,即,沒有用于計算最終總和的函數(shù)調(diào)用。

TA貢獻1797條經(jīng)驗 獲得超4個贊
另外,如果有一種方法可以不同地運行我的查詢,使得數(shù)組不是多維的,那顯然也可以。
$query = "SELECT f_count, uid FROM users WHERE gid=:gid";
...
$array = $stmt->fetchAll();
我正在使用PDO。
是的,還有另一種方式可以不同地運行查詢。您可以使用聚合函數(shù)直接在查詢中SUM獲取所有f_count直接和的總和。您可以將其與組合$stmt->fetchColumn()以獲取第一行(由于我們使用了聚合函數(shù),因此它將是唯一的行)的第一列的值(即總和)。
以下是如何執(zhí)行此操作的示例:
$query = "SELECT SUM(f_count) FROM users WHERE gid=:gid";
$stmt = $pdo->prepare($query);
$stmt->execute(array(':gid' => 'yoursearchvalue'));
$sum = $stmt->fetchColumn();

TA貢獻1804條經(jīng)驗 獲得超3個贊
對于這種情況,foreach循環(huán)是最好的選擇,但如果您必須在單個頁面上多次執(zhí)行此操作,則應將foreach循環(huán)放入函數(shù)中,以使您的代碼保持干凈
function sum_index($arr, $col_name){
$sum = 0;
foreach ($arr as $item) {
$sum += $item[$col_name];
}
return $sum;
}
編輯
經(jīng)過大量搜索后,我發(fā)現(xiàn)該array_column函數(shù)存在于php 5.5 +中,以獲取單列的所有值作為數(shù)組。
對于較低版本的用戶,如果您還希望所有值的總和,則可以使用以下函數(shù),并使用數(shù)組和調(diào)用它。
//to get all values of single column from multidimensional array, this function exist in php 5.5 or greater.
if(!function_exists("array_column"))
{
function array_column($array,$column_name)
{
return array_map(function($element) use($column_name){return $element[$column_name];}, $array);
}
}
如果要獲取單列的所有值,請按以下方式調(diào)用上述函數(shù):
$newArray = array_column($array,$column_name);
如果要對單個列的所有值求和,請使用以下代碼:
$newArraySum = array_sum(array_column($array,$column_name));
添加回答
舉報