这可以用PHP一行完成吗?
如果可能的话会很棒:
$out = array("foo","bar");
echo $out[0];
如:
echo array("foo","bar")[0];
不幸的是,这是不可能的。会这样吗?
所以我可以在一行中做到这一点:
echo array(rand(1,100), rand(1000,2000))[rand(0,1)];
所以让我说我有这个代码:
switch($r){
case 1: $ext = "com"; break;
case 2: $ext = "nl"; break;
case 3: $ext = "co.uk"; break;
case 4: $ext = "de"; break;
case 5: $ext = "fr"; break;
}
这样做会更加简化:
$ext = array("com","nl","co.uk","de","fr")[rand(1,5)];
答案 0 :(得分:4)
为什么不查看array functions on the PHP site?
好吧,如果你从数组中选择一个随机元素,你可以使用array_rand()
。
$ext = array_rand(array_flip(array("com","nl","co.uk","de","fr")));
答案 1 :(得分:2)
echo array_rand(array_flip(array('foo', 'bar')));
数组翻转采用数组并使用值交换键,反之亦然。 array_rand从该数组中提取一个随机元素。
答案 2 :(得分:1)
是的,list
一种PHP语言结构,允许使用下面的语法。
list( $first_list_element ) = array( "foo", ..... );
编辑:
仍然是的,错过了回声。 Reset
将返回第一个数组项,可能并非总是为索引0,但如果您正常创建array
,则会显示。
echo reset( array( "foo",... ) );
再次编辑:
在您更新问题后,我发现您想要一些PHP无法做好的事情。我个人认为这是PHP语言/解释器的语法设计错误。如果你只是意味着你可以这样做。
$array = array( .... ); echo $array[0];
答案 3 :(得分:1)
您可以使用简写形式将内容保持在一行,避免创建永远不会再使用的数组。
echo rand(0,1) ? rand(1,100) : rand(1000,2000);
答案 4 :(得分:0)
我认为你的榜样可能不是最好的。这里真正的语法限制是,无法立即对函数调用的返回值执行数组访问,如,
do_something_with(explode(',', $str)[0]);
而你几乎无法绕过它。分配给变量,然后访问。这是PHP的一个愚蠢的限制,但它就在那里。
你可以在技术上做到,
function array_access($array, $i) {
return $array[$i];
}
do_something_with(array_access(explode(',', $str), 0));
但请不要。它甚至比额外的变量校准更加丑陋。
(鉴于该问题的编辑,这不再是一个充分的答案。但是,我会将其留作参考。)
答案 5 :(得分:0)
print $a[ array_rand($a = array('com','nl','co.uk','de','fr')) ];
答案 6 :(得分:0)
与@ Matchu的答案一样,这解决了更一般的情况,即你有一个来自某处的数组值,无论是函数调用,实例化数组,还是其他。由于任意函数的返回值是最不具体的情况,我将在此示例中使用some_function()
的调用。
$first_element = current(array_slice(some_function(), 0, 1));
所以你可以用
随机化它$random_element = current(array_slice(some_function(), rand(0,1), 1));
但是在那种情况下(就像许多人在php中),有一个更专业的功能;看@ animuson的回答。
将array_shift()调用更改为current()调用:这样效率更高,因为array_shift()将修改array_slice()返回的中间数组。
答案 7 :(得分:0)
目前正在内部邮件列表中对此进行讨论。您可能需要查看它:http://marc.info/?l=php-internals&m=127595613412885&w=2