Yevgeny Simkin
Yevgeny Simkin

Reputation: 28349

Getting element from PHP array returned by function

I'm not sure if this is possible, but I can't figure out how to do it if it is...

I want to get a specific element out of an array that is returned by a function, without first passing it into an array... like this...

$item = getSomeArray()[1];


function getSomeArray(){
     $ret = Array();
     $ret[0] = 0;
     $ret[1] = 100;
     return $ret;
}

What's the correct syntax for this?

Upvotes: 15

Views: 12720

Answers (7)

Jon
Jon

Reputation: 437376

Note, this is a legacy answer that's largely inapplicable for the current PHP versions. Please see the answer below for the correct approach.

PHP cannot do this yet, it's a well-known limitation. You have every right to be wondering "are you kidding me?". Sorry.

If you don't mind generating an E_STRICT warning you can always pull out the first and last elements of an array with reset and end respectively -- this means that you can also pull out any element since array_slice can arrange for the one you want to remain first or last, but that's perhaps taking things too far.

But despair not: the (at this time upcoming) PHP 5.4 release will include exactly this feature (under the name array dereferencing).

Update: I just thought of another technique which would work. There's probably good reason that I 've never used this or seen it used, but technically it does the job.

// To pull out Nth item of array:
list($item) = array_slice(getSomeArray(), N - 1, 1);

Upvotes: 16

anonym
anonym

Reputation: 4850

PHP 5.4 has added Array Dereferencing, here's the example from PHP's Array documentation:

Example #7 Array dereferencing

function getArray() {
    return ['a', 'b', 'c'];
}

// PHP 5.4
$secondElement = getArray()[0]; // output = a

// Previously
$tmp = getArray();
$secondElement = $tmp[0]; // output = a

Upvotes: 6

lextoumbourou
lextoumbourou

Reputation: 463

I know this is an old question, but, in your example, you could also use array_pop() to get the last element of the array, (or array_shift() to get the first).

<?php
$item = array_pop(getSomeArray());


function getSomeArray(){
    $ret = Array();
    $ret[0] = 0;
    $ret[1] = 100;
    return $ret;
}

Upvotes: 1

Kristian
Kristian

Reputation: 3461

Yes, php can't do that. Bat you can use ArrayObect, like so:

$item = getSomeArray()->{1};
// Credits for curly braces for Bracketworks    

function getSomeArray(){
     $ret = Array();
     $ret[0] = 0;
     $ret[1] = 100;
     return new ArrayObject($ret, ArrayObject::ARRAY_AS_PROPS);
}

Okay, maybe not working with numeric keys, but i'm not sure.

Upvotes: 1

Ben Swinburne
Ben Swinburne

Reputation: 26467

The syntax you're referring to is known as function array dereferencing. It's not yet implemented and there's an RFC for it.

The generally accepted syntax is to assign the return value of the function to an array and access the value from that with the $array[1]syntax.

That said, however you could also pass the key you want as an argument to your function.

function getSomeArray( $key = null ) {
  $array = array(
     0 => "cheddar",
     1 => "wensleydale"
  );

  return is_null($key) ? $array : isset( $array[$key] ) ? $array[$key] : false;    
}

echo getSomeArray(0); // only key 0
echo getSomeArray(); // entire array

Upvotes: 2

Jeff
Jeff

Reputation: 380

I am fairly certain that is not possible to do in PHP. You have to assign the returned array to another array before you can access the elements within or use it directly in some other function that will iterate though the returned array (i.e. var_dump(getSomeArray()) ).

Upvotes: 0

jValdron
jValdron

Reputation: 3418

As the others says, there is no direct way to do this, I usually just assign it to a variable like so:

$items = getSomeArray();
$item = $items[1];


function getSomeArray(){
    $ret = Array();
    $ret[0] = 0;
    $ret[1] = 100;
    return $ret;
}

Upvotes: 0

Related Questions