这是我将用于解决我之前发布的复杂问题的代码。 这背后的逻辑是 - 在递归的每次迭代中,函数应该减少$ wa为$ amount,已经进行了,并计算新的$ wa,以找到新的$ amount,直到系统找不到表中的$ amount会更大,然后得到$ wa,并继续它作为最后一次迭代。 当试图开发它时,代码没有返回任何内容,没有错误,没有回声。我做错了什么?
$wa = 0.001;
$address = $address;
function recursion($wa)
{
$resulte = db_select ('Credit_user','c')
->fields ('c')
->range(0,1)
->orderby('cr_ts', 'ASC')
->condition('c.affected','0','=')
->condition('c.amount','0','!=')
->execute();
foreach($resulte as $item) {
$code = $item->redeem_code;
global $code;
$amounte = $item->amount;
global $amounte;
$wai = $wa - $amounte;
global $wai;
if ($wai < 0){
echo "production code that should operate with different
variations of $amounte and $redeem on last iteration";
return;
}
elseif ($wai >= 0){ echo "production code
that should operate with different variations
of $amounte and $redeem on each iteration";
return;
} else {
function recursion($wa){
}
}
}}
echo $amounte;
echo "<br>";
答案 0 :(得分:0)
至少这部分是错误的
} else {
function recursion($wa){
}
应该是
} else {
return recursion($wa);
}
但是这段代码的其余部分非常混乱,所以......
例如,这个逻辑
if ($wai < 0){
//...
}elseif ($wai >= 0){
//...
}else{
//not reachable
return recursion($wa);
}
非常有缺陷。因为无法访问else
块。换句话说,没有什么能满足else条件,因为大多数值都会通过elseif
,其范围内有1
和0
,PHP中的许多内容都会计算出1{true}
或{ {1}}因为PHP的输入错误。
您可以自己测试这个条件
0{false}
输出
$tests = [
false,
-10,
1,
0,
[], ''
];
foreach($tests as $wai){
if ($wai < 0){
echo "1";
}elseif ($wai >= 0){
echo "2";
}else{
echo "3";
}
echo "\n";
}
正如你所看到的那样,没有#3来自2
1
2
2
2
2
区块,正如我所说,这是不可能达到的。因此,这个函数不会递归,因此不能从所述不存在的递归中返回任何内容。
测试online
此外:
else
必须首先宣布全球。
$wai = $wa - $amounte;
global $wai;
我们可以通过设置功能范围来测试它。
global $wai;
$wai = $wa - $amounte;
现在可以预期这会打印function foo(){
$wai = 50;
global $wai;
echo $wai;
}
global $wai;
$wai = 100;
foo();
,但会打印50
。它以这种方式执行:
100
$wai
设置为= 100(分配)$wai
foo
= 50; $wai
声明为全局,并从全局范围(函数范围之外)继承全局$wai
的值,该值为100 这是您的代码的非常接近的近似值,它在功能上等同于Check it yourself
现在,如果您更改订单
$wai
它输出function foo(){
global $wai;
$wai = 50;
echo $wai;
}
global $wai;
$wai = 100;
foo();
测试this
让我们看看,50
函数需要更改才能返回。假设递归有效,但事实并非如此。人们必须假设,在某些时候,如果我指出的条件,它会被认为是其中两个部分之一。如果它不这样做,我们将无限递归,直到PHP内存不足和崩溃或最大执行时间被命中。所以我们同意它必须经过那些。现在它怎么能从
echo
如果其他两个返回仅为return recursion($wa);
或返回return;
。如果函数的下一次迭代将null返回到我们以递归方式调用所述函数的返回,那么它的本质是非常自然的,那么该调用也必须返回null。
null
所以
echo "production code that should operate with different variations of $amounte and $redeem on last iteration";
return;
换句话说,它几乎都被打破了。请不要采取错误的方式,我只是指出我看错了。每个人都必须从学习代码开始,我有近8年的专业网页设计和PHP编程经验。但是,我仍然记得学习的内容,我仍然犯了很多错误。
我已经指出了我可以修复的东西,但对于像if逻辑这样的东西,我无法弄清楚那个逻辑应该是什么。我只能指出它崩溃的地方。