如果else在PHP中没有按预期工作——基于对另一个数组的随机选择从数组中随机选择';s键


If else not working as expected in PHP--random selection from arrays based on random selection of another array's key.

我正试图让一个基本的PHP名称生成器正常工作,但我在这里遇到了一些减速带。首先,代码:

<?php
$gender=array(
    "Male"=>00,
    "Female"=>01,
    );
$m_names=array(
    "Jack"=>00,
    "Bill"=>01,
    "Nathan"=>02,
    );
$f_names=array(
    "Betty"=>00,
    "Margaret"=>01,
    "Rachel"=>02,
    );
if ($gender="Male")
    {
    print_r(array_rand($m_names,1));
    }
else
    {
    print_r(array_rand($f_names,1));
    }
?>

数组都检查出来了,我知道print_r(array_rand());工作正常--我只是不明白if-else函数是怎么回事。

使用上面的代码,我只从$m_names数组中获得名称输出。如果我将If参数更改为($gender="Female"),我只得到$f_name元素。我在这里错过了什么,我如何以不同的方式看待这个概念来解决我的误解?

我不明白你的意思。据我所见,在if语句中有一个赋值(而不是等式),这意味着你总是进入if()语句的第一部分(而不是else部分)。

你不应该用吗

if ($gender[array_rand($gender)]) {
    // ...
}

相反?

实际发生的是

if ($gender="Male") {
    // ...
}

解释影响值"Male"$gender$gender="Male"。矫揉造作会从矫揉造作中返回值。因此,该语句被求值为"Male",if语句将其视为真值(true == "Male"),因为它实际上将字符串转换为布尔值。

我还建议为您的名称值存储简单的数组。它将使添加新值比使用f_namesm_names数组的键更容易。

最终结果如下:

<?php
$gender = array(
    "Male"  => true,
    "Female"=> false,
);
$m_names = array(
    "Jack",
    "Bill",
    "Nathan",
);
$f_names = array(
    "Betty",
    "Margaret",
    "Rachel",
);
if ($gender[array_rand($gender)]) {
    print_r($m_names[array_rand($m_names)]);
} else {
    print_r($f_names[array_rand($f_names)]);
}

我已经重写了一些,但现在我只从$f_name数组中得到结果——即使我将if语句中的布尔值从true更改为false。因此,现在看来,我的if被跳过了,脚本直接运行到else,后者调用$f_name数组中的结果。

<?php
$gender = array(
    "Male: "=>true,
    "Female: "=>false,
    );
$m_names = array(
    "Nathan"=>00,
    );
$f_names = array(
    "Rachel"=>00,
    );
print array_rand($gender);
if ($gender['Male'])
    {
    print_r(array_rand($m_names,1));
     }
else
    {
    print_r(array_rand($f_names,1));
    }
?>

我得到了像"Male:Nathan"answers"Female:Nathan)这样的结果,但与$f_names数组无关,当$gender选择为"Female"或值为1时,它应该由else函数调用。

我觉得自己很笨,因为这不可能真的那么难。