函数内的函数变量未被识别
variable of function within a function is not being recognized
所以我有这个函数,它非常适合将数组中特定字段的所有值相加,在这种情况下 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 值未在任何地方使用,但在函数中很明显。
我猜这可能是一个范围问题,所以我尝试在第一行执行 global $field 但这没有任何区别,现在它说 global $field 没有在任何地方使用。我做错了什么。
public static function sumFieldArray($field,$array)
{
$field_sum = array_sum(array_map(
function($element, $field){
return $element[$field];
},
$array));
return $field_sum;
}
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));
}
你说得对,这是范围问题。您必须使用 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;
}
所以我有这个函数,它非常适合将数组中特定字段的所有值相加,在这种情况下 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 值未在任何地方使用,但在函数中很明显。
我猜这可能是一个范围问题,所以我尝试在第一行执行 global $field 但这没有任何区别,现在它说 global $field 没有在任何地方使用。我做错了什么。
public static function sumFieldArray($field,$array)
{
$field_sum = array_sum(array_map(
function($element, $field){
return $element[$field];
},
$array));
return $field_sum;
}
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));
}
你说得对,这是范围问题。您必须使用 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;
}