我正试图让一个基本的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()
语句的第一部分(而不是else部分)。
你不应该用吗
if ($gender[array_rand($gender)]) {
// ...
}
相反?
实际发生的是
if ($gender="Male") {
// ...
}
解释影响值"Male"
到$gender
的$gender="Male"
。矫揉造作会从矫揉造作中返回值。因此,该语句被求值为"Male"
,if语句将其视为真值(true == "Male"
),因为它实际上将字符串转换为布尔值。
我还建议为您的名称值存储简单的数组。它将使添加新值比使用f_names
和m_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函数调用。
我觉得自己很笨,因为这不可能真的那么难。