我是一个php开发人员,我研究过递归函数,我编码用递归函数找到数组中的元素总和,但是我得到了错误。
$example = array(10,20,30);
function sum_array($array) {
$total = 0;
foreach ($array as $element) {
if(is_array($element)) {
$total += sum_array($element);
} else {
$total += $element;
}
}
return $total;
}
echo sum_array($example); // Outputs 60
<?php
$example = array(10,20,30);
function add_me($arr) {
if($arr==0) {
return $arr;
}
return add_me($arr[0]+$arr[1]+$arr[2]);
}
我从互联网上找到的第一个代码效果很好,但是在我的代码中它会出错。当我使用echo add_me($example);
调用它时,它会形成错误。
你能告诉我为什么会那样..任何帮助都会受到赞赏。谢谢。
答案 0 :(得分:1)
使用array_sum($array)
PHP函数
答案 1 :(得分:1)
由于我无法对您的代码执行任何操作以使其正常运行,我想我会解释您从互联网上获得的功能:
//Set sample data
$example = array(10,20,30);
function sum_array($array) {
//first time called, we start at 0
$total = 0;
//Loop through each value in the array
foreach ($array as $element) {
//If the value is another array, we use recursion
if(is_array($element)) {
//using the recursion, we send the array to this function and add to total
$total += sum_array($element);
} else {
//value was not an array, but scalar, add to total
$total += $element;
}
} // Go to next value
//Give the total back to asker
return $total;
}
echo sum_array($example); // Outputs 60
这与您为每行添加注释的代码相同。有关它如何与$example
数组一起使用的示例,它将会:
sum_array([10,20,30])
$total = 0
$element = 10
$total += 10 //10
$element = 20
$total += 20 //30
$element = 30
$total += 30 //60
return $total //60
使用示例数据,根本不会发生递归,如果你有一个数组作为其中一个值,即[10, [5, 2], 20]
,那么它会像:
sum_array([10,[5,2],20])
$total = 0
$element = 10
$total += 10 //10
$element = [5, 2]
sum_array([5,2])
$total_1 = 0
$element_1 = 5
$total_1 += 5 //5
$element_1 = 2
$total_1 += 2 //7
return $total_1 //7
$total += $total_1 //17
$element = 20
$total += 20 //37
return $total //37
希望这有助于您理解递归。
答案 2 :(得分:1)
如果您正在尝试创建递归函数,请使用以下命令:
function sum_array($array)
{
$sum = 0;
foreach ($array as $value) {
// if the value itself is an array
// recurse further: call the function again
if (is_array($value)) {
$sum = $sum + sum_array($value);
}
// if the value is not an array,
// simply add it to $sum
else {
$sum = $sum + $value;
}
}
return $sum;
}
echo sum_array([3, 4, [5,6], 8]); // => 26
is_array()
检查值是否为数组,如果是,则再次调用该函数。如果该值不是数组,则只将该值添加到$sum
。最后,返回$sum
。
这可以通过多种方式完成。以下是一些:
function sum_array($array) {
$sum = 0;
array_walk_recursive($array, function($v) use (&$sum) {
$sum += $v;
});
return $sum;
}
echo sum_array([3, 4, [5,6], 8]); // => 26
function callback($v, $w) {
return $v + (is_array($w) ? array_reduce($w, __FUNCTION__) : $w);
}
echo array_reduce([3, 4, [5,6], 8], 'callback'); // => 26
答案 3 :(得分:0)
如果您正在寻找数组的递归,可以使用RecursiveArrayIterator
类,另请参阅RecursiveIteratorIterator
class
简单说明(摘自this answer):
<?php
$a = array(1,2,array(3,4, array(5,6,7), 8), 9);
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($a));
foreach($it as $v) {
$new_arr[] = $v;
}
echo array_sum($new_arr); // "prints" 45
答案 4 :(得分:0)
class Geocodeschool
include Mongoid::Document
embedded_in :school
field :school_premium_aside, type: Array
end