Подтвердить что ты не робот

Получение элемента из массива PHP, возвращаемого функцией

Я не уверен, что это возможно, но я не могу понять, как это сделать, если это...

Я хочу получить конкретный элемент из массива, который возвращается функцией, не передавая сначала его в массив... вроде этого...

$item = getSomeArray()[1];


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

Какой правильный синтаксис для этого?

4b9b3361

Ответ 1

PHP пока не может этого сделать, это известное ограничение. Вы имеете полное право задаваться вопросом: "Вы издеваетесь надо мной?". К сожалению.

Если вы не возражаете, генерируя предупреждение E_STRICT, вы всегда можете вытащить первый и последний элементы массива с помощью reset и end соответственно - это означает, что вы также можете вытащить любой элемент с array_slice может организовать тот, который вы хотите оставаться первым или последним, но это, возможно, слишком далеко.

Но отчаяние нет: (в это время предстоящий) версия PHP 5.4 будет включать именно эту функцию (под названием разыменование массива).

Обновление: Я просто подумал о другой технике, которая будет работать. Вероятно, есть веская причина, по которой я никогда не использовал это или не видел, что он используется, но технически он выполняет эту работу.

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

Ответ 2

Да, php не может этого сделать. Bat вы можете использовать ArrayObect, например:

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

Хорошо, возможно, не работает с цифровыми клавишами, но я не уверен.

Ответ 3

Синтаксис, о котором вы говорите, называется разыменованием функциональных массивов. Он еще не реализован и там RFC для него.

Общепринятый синтаксис - назначить возвращаемое значение функции массиву и получить доступ к значению с помощью синтаксиса $array[1].

Тем не менее, вы также можете передать ключ, который вам нужен, в качестве аргумента для вашей функции.

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

Ответ 4

В PHP 5.4 добавлено Разделение массива, вот пример из документации PHP Array:

Пример # 7 Разрушение разворота

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

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

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

Ответ 5

Я знаю, что это старый вопрос, но в вашем примере вы также можете использовать array_pop() для получения последнего элемента массива (или array_shift() для получения первого).

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


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

Ответ 6

Как говорят другие, нет прямого способа сделать это, я обычно просто назначаю его такой переменной:

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


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

Ответ 7

Я уверен, что это невозможно сделать в PHP. Вы должны назначить возвращенный массив другому массиву, прежде чем сможете получить доступ к элементам внутри или использовать их непосредственно в какой-либо другой функции, которая будет выполнять итерацию по возвращенному массиву (то есть var_dump (getSomeArray())).