所以我有这个功能,可以很好地将数组中特定字段的所有值的总和相加,在本例中为num_sold
所以数组是这样的
array(4) {
[0]=>
array(2) {
["num_sold"]=>
string(1) "6"
["id_product"]=>
string(1) "2"
}
[1]=>
array(2) {
["num_sold"]=>
string(1) "6"
["id_product"]=>
string(1) "3"
}
[2]=>
array(2) {
["num_sold"]=>
string(1) "4"
["id_product"]=>
string(1) "4"
}
[3]=>
array(2) {
["num_sold"]=>
string(1) "5"
["id_product"]=>
string(1) "7"
}
}
// this correctly returns 21
$total = array_sum(array_map(
function($element){
return $element['num_sold'];
},
$array));
现在我希望能够在其他字段名称上重用此函数,因此我想创建一个函数,但是$ field值没有通过。在php storm中,它表示sumFieldArray($ field,$ array)中的$ field值在任何地方都没有使用,但它明显在函数中。
我猜这可能是一个范围问题,所以我尝试在第一行做全局$ field但是没有区别,而是现在说全局$字段没有在任何地方使用。我做错了什么。
public static function sumFieldArray($field,$array)
{
$field_sum = array_sum(array_map(
function($element, $field){
return $element[$field];
},
$array));
return $field_sum;
}
答案 0 :(得分:2)
array_sum()
只使用一个参数(数组元素)调用该函数。它不会通过$field
作为第二个参数。您可以使用use()
选项允许内部函数访问外部作用域中的变量。
public static function sumFieldArray($field,$array)
{
$field_sum = array_sum(array_map(
function ($element) use($field) {
return $element[$field];
},
$array));
return $field_sum;
}
如果你使用PHP 5.5+,你也可以使用array_column
函数来提取该字段的所有值。
public static function sumFieldArray($field,$array)
{
return array_sum(array_column($array, $field));
}
答案 1 :(得分:2)
你是对的,这是一个范围问题。您必须使用 use 继承父作用域。
public static function sumFieldArray($field, $array)
{
$field_sum = array_sum(array_map(
function($element, $field) use ($field) {
return $element[$field];
},
$array));
return $field_sum;
}