我正在尝试使用一个基本的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_names元素。我在这里错过了什么,我怎么能以不同的方式思考这个概念来解决我的误解?
答案 0 :(得分:2)
我不明白你的意思。从我所看到的,你在if语句中有一个赋值(而不是相等),这意味着你总是会进入if()
语句的第一部分(而不是在其他部分) )。
你不应该使用
if ($gender[array_rand($gender)]) {
// ...
}
代替?
实际发生了什么
if ($gender="Male") {
// ...
}
解释$gender="Male"
,这会影响"Male"
到$gender
的值。做作会从做作中返回值。因此,语句被评估为"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)]);
}
答案 1 :(得分:0)
我已经重写了一下,但现在我只得到$ f_names数组的结果 - 即使我将if语句中的boolean从true更改为false。所以现在看来我的if被跳过了,脚本直接运行到else,它调用$ f_names数组的结果。
<?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));
}
?>
我得到的结果如“男:Nathan”和“女:Nathan”,但从未与$ f_names数组有任何关系,当$ gender选择“女性”或值时,应由else函数调用1.
我感觉非常愚蠢,因为这真的不是那么困难。