如果在PHP中没有按预期工作 - 基于随机选择另一个数组的键从数组中随机选择。

时间:2014-04-21 03:19:08

标签: php arrays random-sample

我正在尝试使用一个基本的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元素。我在这里错过了什么,我怎么能以不同的方式思考这个概念来解决我的误解?

2 个答案:

答案 0 :(得分:2)

我不明白你的意思。从我所看到的,你在if语句中有一个赋值(而不是相等),这意味着你总是会进入if()语句的第一部分(而不是在其他部分) )。

你不应该使用

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

代替?

实际发生了什么

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

解释$gender="Male",这会影响"Male"$gender的值。做作会从做作中返回值。因此,语句被评估为"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)]);
}

答案 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.

我感觉非常愚蠢,因为这真的不是那么困难。