7

In php how can I access an array's values without using square brackets around the key? My particular problem is that I want to access the elements of an array returned by a function. Say function(args) returns an array. Why is $var = function(args)[0]; yelling at me about the square brackets? Can I do something like $var = function(args).value(0); or am I missing something very basic?

1

5 Answers 5

10

As the others have said, you pretty much have to use a temporary variable:

$temp = myFunction();
$value = $temp[0];

But, if know the structure of the array being returned it is possible to avoid the temporary variable.

If you just want the first member:

$value = reset(myFunction());

If you want the last member:

$value = end(myFunction());

If you want any one in between:

// second member
list(, $value) = myFunction();

// third
list(, , $value) = myFunction();

// or if you want more than one:

list(, , $thirdVar, , $fifth) = myFunction();
Sign up to request clarification or add additional context in comments.

3 Comments

Hey, clever! list() never ceases to amaze me. +1.
reset() and end() require the arguments be references. You get an E_STRICT notice in recent versions of php.
yes, i have been doing this with temporary variables, but was wondering whether i really needed to. now i'm just wondering why i have to. but in any case your list() usage is pretty clever. thanks!
2

In PHP, when getting an array as a function result, you unfortunately have to do an extra step:

$temp_array = function($args);
$var = $temp_array[0];

For objects, this has been relaxed in PHP 5. You can do:

$echo function($args)->property;

(provided function returns an object of course.)

3 Comments

It sucks but this is the only way to do this. One of the many reasons to hate PHP.
@Luke true, but not that bad imo. Who knows, it may get fixed in PHP 7 :)
@Luke - that's a bit strong isn't it?
1
function getKey($array, $key){
    return $array[$key];
}

$var = getKey(myFunc(args), $key);

There is no way to do this without adding a user function unfortunately. It is just not part of the syntax.

You could always just do it the old fashion way

$array = myFunc();
$value = $array[0];

Comments

1

What exactly matches your expecting is:

echo pos(array_slice($a=myFunc(), pos(array_keys(array_keys($a), 'NameOfKey'));

answered Kinetix Kin, Taipei

Comments

1

if you want this, its probably best to be returning an object (unfortunately, its totally lame php doesnt support this). Heres a crazy way i was able to figure out though, out of novelty (please dont do this!):

function returnsArray(){
    return array("foo" => "bar");
}

echo json_decode(json_encode((object)returnsArray()))->foo;
//prints 'bar'

So yeah..until they add support for array dereferencing in php, i think you should probably just cast the return array as an object:

return (object)array("foo" => "bar");

and then you can do returnsArray()->foo, since php relaxes dereferencing for objects but not arrays.. or of course write a wrapper function like others have suggested.

1 Comment

also, looks like support for this has been recently added to php? wiki.php.net/rfc/functionarraydereferencing

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.