amb
amb

Reputation: 499

accessing array values without square brackets in php

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?

Upvotes: 7

Views: 5937

Answers (5)

mutexkid
mutexkid

Reputation: 11

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.

Upvotes: 1

Kinetix Kin
Kinetix Kin

Reputation: 11

What exactly matches your expecting is:

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

answered Kinetix Kin, Taipei

Upvotes: 1

nickf
nickf

Reputation: 546035

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();

Upvotes: 10

Tyler Carter
Tyler Carter

Reputation: 61567

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

Upvotes: 1

Pekka
Pekka

Reputation: 449425

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.)

Upvotes: 2

Related Questions