Php 函数中的函数变量未被识别
因此,我有一个函数,它可以很好地将数组中特定字段的所有值相加,在本例中是num_ 数组是这样的Php 函数中的函数变量未被识别,php,multidimensional-array,associative-array,Php,Multidimensional Array,Associative Array,因此,我有一个函数,它可以很好地将数组中特定字段的所有值相加,在本例中是num_ 数组是这样的 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"
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,但没有什么区别,而是说全局$field没有在任何地方使用。我做错了什么
public static function sumFieldArray($field,$array)
{
$field_sum = array_sum(array_map(
function($element, $field){
return $element[$field];
},
$array));
return $field_sum;
}
array\u 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;
}
如果您使用的是PHP5.5+,还可以使用该函数提取该字段的所有值
public static function sumFieldArray($field,$array)
{
return array_sum(array_column($array, $field));
}
array\u 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;
}
如果您使用的是PHP5.5+,还可以使用该函数提取该字段的所有值
public static function sumFieldArray($field,$array)
{
return array_sum(array_column($array, $field));
}
你说得对,这是一个范围问题。您必须使用继承父作用域
此处的更多信息:您是对的,这是一个范围问题。您必须使用继承父作用域
这里有更多信息:php有两个作用域:全局(代码的顶级)和局部(在当前块中)。在某个中间级别定义的变量本质上是完全不可访问的,因为全局变量只适用于绝对顶级范围。没有
parent$var
或祖父母$var
作用域功能。@MarcB您忘记了函数表达式中的use()
选项。@barmar:是的,没错。但这是必须在父范围内完成的事情。子对象无法回过头来获取这些内容。php在当前块中正好有两个作用域:全局(代码的顶级)和局部。在某个中间级别定义的变量本质上是完全不可访问的,因为全局变量只适用于绝对顶级范围。没有parent$var
或祖父母$var
作用域功能。@MarcB您忘记了函数表达式中的use()
选项。@barmar:是的,没错。但这是必须在父范围内完成的事情。一个孩子不能回过头去拿那些东西。这本来是我的首选答案,因为它提供了有用的数组列版本,尽管这对我来说不起作用,因为我没有PHP5.5。其他人会发现它很有用,但是代码无效。在php storm中,它说它期望(在函数这样做之后)“函数使用($field)($element){”不起作用。我想它只是需要一个快速的调整,这将是一个有用的答案,谢谢你的帮助。我把use
选项放错了位置,它在参数列表后面。这将是我的首选答案,因为它提供了有用的数组列版本,尽管这对我来说不起作用,因为我没有php 5.5我会发现它很有用,但是代码无效。在php storm中,它说它期望(在函数这么做之后)“函数使用($field)($element){”将不起作用。我想它只需要快速调整一下,这将是一个有用的答案,感谢您的帮助。我把使用
选项放在了错误的位置,它放在参数列表后面。