从两个字符串中随机选择一个字符串 - PHP

17
$apple="";
$banana="";
$apple="Red";
$banana="Blue";

$random(rand($apple, $banana);
echo $random;

我该如何通过PHP快速选择一个随机字符串?


3
顺便提一句,你不需要在使用前声明变量 - 你可以直接创建 $apple="red"; - Manse
谢谢!这是从坏经验中养成的坏习惯,我现在为了额外的安全性而这样做。 - TheBlackBenzKid
6个回答

40

怎么样:

$random = rand(0, 1) ? 'Red' : 'Blue';

31

你的代码存在问题

PHP rand() 函数需要输入两个数字表示范围,用于选择一个随机数。你不能将字符串作为输入。

请参阅 PHP 手册中关于rand()函数的页面

解决方案

你可以使用 array_rand() 函数:

$strings = array(
    'Red',
    'Blue',
);
$key = array_rand($strings);
echo $strings[$key];

另一个选择是使用 shuffle()
$strings = array(
    'Red',
    'Blue',
);
shuffle($strings);
echo reset($strings);

shuffle()array_rand()之间的主要区别 - TheBlackBenzKid
3
那是一个问题吗?如果是,上面的相应代码示例和相关链接的手册页面清楚地展示了它们之间的区别。 - Treffynnon

13

使用数组:

$input = array("Red", "Blue", "Green");
echo $input[array_rand($input)];

已点赞,这也是一个意味着简洁明了的两行代码的答案。因为有解释,所以标记了另一个答案,以便其他人受益。 - TheBlackBenzKid
@TheBlackBenzKid 对不起,我不明白你的意思?“Repped and this is also an answer to mean”是什么意思? - Manse
1
我将这个答案标记为“赞同” - 我给它点了声望 - 加分。这意味着我在我的解决方案中使用了代码 - 该代码并没有完全标记为答案,因为上面的答案有更多的解释,可能会使其他人受益 - 但是为了您的努力和贴子,我想给一些“业力”,就像他们说的那样。 - TheBlackBenzKid

5

我遇到了这个在谷歌搜索结果中排名靠前的老问题。你可以拥有超过两个选项,但仍然可以将它们全部放在一行上。

echo ['green', 'blue', 'red'][rand(0,2)];

3

array_rand() 可能是最好的方法:

$varNames = array('apple','banana');
$var = array_rand($varNames);
echo ${$varNames[$var]};

2

rand()函数有两个参数: 随机数的下限和上限。你不能像使用变量那样使用它,因为这不是该函数的工作方式。

查看文档:
http://php.net/rand

实现你想要的简单方法如下:

$array = array();
$array[0] = 'banana';
$array[1] = 'orange';
$randomSelected = $array[rand(0,(count($array)-1))];

据我所知,这个解决方案比array_rand()更快。我可以查找一下相关的来源。

考虑到这一点 - 但是这里的每个人都在说array_rand()。 - TheBlackBenzKid
真的,但大多数程序员都能够理解这种相当简单的两个函数的用法。 - OptimusCrime
只为速度。这就是我想要的。我只关心速度。谢谢。 - TheBlackBenzKid
@Treffynnon:真的吗,我不知道。读了一篇文章说我的解决方案更好...嗯,谢谢。 - OptimusCrime
@TheBlackBenzKid 一定要验证人们的微观优化,因为其中许多是不准确、过时或者如此微不足道,以至于它们所引起的代码气味不值得。 - Treffynnon
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接