开发者

Can this be done in 1 line?

Can this be done in 1 line with PHP?

Would be awesome if it could:

$out = array("foo","bar");
echo $out[0];

Something such as:

echo array("foo","bar")[0];

Unfortunately that's not possible. Would it be possible like this?

So I can d开发者_Python百科o this for example in 1 line:

echo array(rand(1,100), rand(1000,2000))[rand(0,1)];

So let's say I have this code:

 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;
 }

That would be much more simplified to do it like this:

$ext = array("com","nl","co.uk","de","fr")[rand(1,5)];


Why not check out the array functions on the PHP site?

Well, if you're picking a random element from the array, you can use array_rand().

$ext = array_rand(array_flip(array("com","nl","co.uk","de","fr")));


echo array_rand(array_flip(array('foo', 'bar')));

array flip takes an array and swaps the keys with the values and vice versa. array_rand pulls a random element from that array.


You can use a shorthand form to keep things on one line and avoid creating an array that will never be used again.

echo rand(0,1) ? rand(1,100) : rand(1000,2000);


Yes, list a PHP language construct that allows the syntax below.

list( $first_list_element ) = array( "foo", ..... );

EDIT:

Still Yes, Missed the echo. Reset will return the first array item, which might not always be index 0, but if you create an array normally it will.

echo reset( array( "foo",... ) );

EDIT AGAIN:

After you updated your question I see that you want something that PHP just can't do well. I personally think it's a syntax design error of the PHP language/interpreter. If you just mean one-line you could do.

$array = array( .... ); echo $array[0];


I think your example may not be the best. The real syntax limitation here is that one can not immediately perform array access on the returned value of a function call, as in,

do_something_with(explode(',', $str)[0]);

And you pretty much can't get around it. Assign to a variable, then access. It's a silly limitation of PHP, but it's there.

You can technically do,

function array_access($array, $i) {
    return $array[$i];
}
do_something_with(array_access(explode(',', $str), 0));

But please don't. It's even uglier than an extra variable asignment.

(Given the edit to the question, this no longer a sufficient answer. However, I will leave it up for reference.)


Like @Matchu's answer, this addresses the more general case, ie you have an array value that came from somewhere, be it a function call, an instantiated array, whatever. Since the return value from an arbitrary function is the least specific case, I'll use a call to some_function() in this example.

$first_element = current(array_slice(some_function(), 0, 1));

So you could randomize it with

$random_element = current(array_slice(some_function(), rand(0,1), 1));

but in that case (as in many in php) there is a more specialized function for that; see @animuson's answer.

edited

changed array_shift() call to current() call: this is more efficient, because array_shift() will modify the intermediate array returned by array_slice().


This is being discussed in the internals mailing list right now. You might want to check it: http://marc.info/?l=php-internals&m=127595613412885&w=2


print $a[ array_rand($a = array('com','nl','co.uk','de','fr')) ];
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜