Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用函数替换goto,为什么';这不管用吗?_Php - Fatal编程技术网

Php 用函数替换goto,为什么';这不管用吗?

Php 用函数替换goto,为什么';这不管用吗?,php,Php,我一直在尝试更改验证脚本的一些代码,以便它不包含goto,因为我想在Web主机上运行我的脚本,不幸的是,大多数脚本实际上没有5.3或更高版本 该代码旨在使用兰德公司生成的值作为唯一的验证号。如果它发现它已经在数据库中,它将在数字上附加1,直到它找到一个可用的数字为止。很简单。我知道对于MySQL查询来说这是一个糟糕的实践,但实际上这只是一个简单的实践脚本 代码如下: function gen_val($val) { $query = mysql_query("SELECT val_id

我一直在尝试更改验证脚本的一些代码,以便它不包含goto,因为我想在Web主机上运行我的脚本,不幸的是,大多数脚本实际上没有5.3或更高版本

该代码旨在使用兰德公司生成的值作为唯一的验证号。如果它发现它已经在数据库中,它将在数字上附加1,直到它找到一个可用的数字为止。很简单。我知道对于MySQL查询来说这是一个糟糕的实践,但实际上这只是一个简单的实践脚本

代码如下:

function gen_val($val)
{
    $query = mysql_query("SELECT val_id FROM users_tmp WHERE val_id=$val");
    $row = mysql_fetch_array($query);
    if ($row[0]==$val) {
        gen_val($val+1);
    } else {
        return $val;
    }
}

$val_x=gen_val(rand());
如果该值已存在于数据库中,则返回值“0”。如果还没有类似的值,函数就可以正常工作,所以我认为函数递归有问题。我不认为我真的知道如何正确使用它,所以请继续教育我

干杯


Asher

您忘记返回递归的结果

return gen_val($val+1);

您忘记返回递归的结果

return gen_val($val+1);

如果我错了,请纠正我,但您希望为每个用户获取唯一的ID。具有此功能。

如果我错了,请纠正我,但您希望为每个用户获取唯一的ID。具有此功能。

它只在满足if条件的递归的最后一次迭代中返回值,但在每次后续完成时,返回值不返回,包括调用gen_val的第一次迭代。因为递归并不总是包含返回内容。它返回
$val
,因为您编写了
返回$val
。它本身不返回
$val
。因为这是两个独立的函数调用。它只在满足if条件的递归的最后一次迭代中返回值,但在每次后续完成时返回值,返回值不返回,包括调用gen_val的第一次迭代。因为递归并不总是包含返回内容。它返回
$val
,因为您编写了
返回$val
。它不会单独返回
$val
。因为这是两个独立的函数调用。仅供参考,随着数据库的增长,此特定函数将越来越慢。MySQL内置了独特的id功能,这是不必要的。仅供参考,随着数据库的增长,此特定功能将变得越来越慢。MySQL内置了独特的id功能,这是不必要的。