PHP比较int和string

PHP比较int和string,php,Php,代码如下 function subscribe($api, $target_list_name, $fname, $lname, $email_to_subscribe, $membership_level_id) { $temp_membership_name = ""; if ((int) $membership_level_id == 2) { $temp_membership_name = "Option 1"; } elseif ((int) $

代码如下

function subscribe($api, $target_list_name, $fname, $lname, $email_to_subscribe, $membership_level_id) {
    $temp_membership_name = "";
    if ((int) $membership_level_id == 2) {
        $temp_membership_name = "Option 1";
    } elseif ((int) $membership_level_id == 5) {
        $temp_membership_name = "Option 2";
    } else {
        $temp_membership_name = "Option 3";
    }
}
出于某种原因,不管结果如何,选项3始终是结果,我已经将$membership\u level\u id设置为2和5进行了测试,这两次执行else块


不明白为什么会有任何提示?

您可以将此作为解决方案

 if ($membership_level_id == "2") {
     $temp_membership_name = "Option 1";
 } elseif ($membership_level_id == "5") {
     $temp_membership_name = "Option 2";
 } else {
     $temp_membership_name = "Option 3";
 }

您的代码中缺少了
else if
中的空格。 我已经测试过了,你可以看看:

此处测试:

输出:

Option 1   Option 1
尝试使用此代码或对$member\u level\u id的值进行故障排除

function subscribe($api,$target_list_name,$fname,$lname,$email_to_subscribe, $membership_level_id)
{

     $temp_membership_name = "";
     echo $membership_level_id;exit;
 if ((int)$membership_level_id == '2') {
     $temp_membership_name = "Option 1";
 } elseif ((int)$membership_level_id =='5') {
     $temp_membership_name = "Option 2";
 } else {
     $temp_membership_name = "Option 3";
 }
}
使用“switch”语句,然后提供一个标准的“default”选项怎么样

也就是说<代码>如果((int)$membership\u level\u id==2)

PHP仅将文本转换为数字

所以。。。在使用该值之前,检查
$membership\u level\u id
是否为数字,如何


你应该检查你的输入。php执行自动类型转换,因此即使数字存储为字符串,它仍应进行计算。不需要进行类型转换。或者

a) 您的代码没有正确提供参数(检查拼写?)

b) 输入的第一个字符中有空格或非数值,导致类型转换返回0或0的值

c) 函数的其他部分正在处理变量


我直接运行了您发布的代码,它可以处理整数或文本。我认为您间接地设置了$membership\u level\u id,您应该检查您的输入,以确保函数实际接收到您认为的内容

请发布
var\u dump($membership\u level\u id)的输出。只要$membership\u level\u id的值为2或5(作为字符串或数字),它将输入一个案例。您使用的是双等号,所以您甚至不需要(int),它不会检查类型。5 == "5", "2" == 2, "2" !== 2.我认为下面的答案之一不是解决方案,问题可能发生在函数调用之前。$membership\u level\u id从何而来?嗯,这是一个怎样的“解决方案”?因为$membership\u level\u id是一个字符串,所以要比较的值也必须是一个字符串。@user3045072这是错误的。在比较字符串和整数时,PHP会自动将字符串转换为整数。这种技术被称为“类型杂耍”:您在代码的else if中遗漏了一个空格。你能测试并确认吗@Nizzle@Nizzle你试过了吗?试过了,它仍然总是将$temp_membership_name设置为“选项3”@Nizzle:你看到我的链接了吗?它显示正确的输出。请看这里:它正在工作。你应该用我的函数替换你的订阅函数。如果这个函数在您的代码中不起作用,那么在其他地方就没有问题了。@Nizzle:您发布的问题在我的链接中得到了解决。所以,如果你在其他地方有问题,你应该作为一个新问题来回答。
function subscribe($api, $target_list_name, $fname, $lname, $email_to_subscribe, $membership_level_id) {
    $temp_membership_name = "shevehferhgifsfshfishfishf";
    if ((int) $membership_level_id == 2) {
        $temp_membership_name = "Option 1";
    } elseif ((int) $membershipMWAHHAHAHHAHAHA_level_id == 5) {
        $temp_membership_name = "Option 2";
    } else {
        $temp_membership_name = "Option 3";
    }
}
function subscribe($api,$target_list_name,$fname,$lname,$email_to_subscribe, $membership_level_id)
{

     $temp_membership_name = "";
     echo $membership_level_id;exit;
 if ((int)$membership_level_id == '2') {
     $temp_membership_name = "Option 1";
 } elseif ((int)$membership_level_id =='5') {
     $temp_membership_name = "Option 2";
 } else {
     $temp_membership_name = "Option 3";
 }
}
`if(is_numeric($_membership_level_id))
{
//number.
} else {
// not a number.
}`
function subscribe($api, $target_list_name, $fname, $lname, $email_to_subscribe, $membership_level_id) {
    $temp_membership_name = "shevehferhgifsfshfishfishf";
    if ((int) $membership_level_id == 2) {
        $temp_membership_name = "Option 1";
    } elseif ((int) $membershipMWAHHAHAHHAHAHA_level_id == 5) {
        $temp_membership_name = "Option 2";
    } else {
        $temp_membership_name = "Option 3";
    }
}