PHP: Можно ли ссылаться на один элемент массива, который возвращается функцией?

любая идея, как в PHP возможно как следующее:

<?php
$firstElement = functionThatReturnsAnArray()[0];

... Кажется, он не "берет". Мне нужно сделать это как 2-шаговый:

<?php
$allElements = functionThatReturnsAnArray();
$firstElement = $allElements[0];

... просто любопытно - другие языки, на которых я играю, разрешают подобные вещи, и я ленив, чтобы пропустить это в PHP... любое понимание было оценено...

Ответы

Ответ 1

Try:

<?php
$firstElement = reset(functionThatReturnsAnArray());

Если вы просто ищете первый элемент массива.

Ответ 2

@Scott Reynen

что не верно. Это будет работать:

list(,,$thirdElement) = $myArray;

Ответ 3

К сожалению, это невозможно с PHP. Для этого вам нужно использовать две строки.

Ответ 4

Вы можете сделать это в одной строке! Используйте array_shift().

<?php

echo array_shift(i_return_an_array());

function i_return_an_array() {
    return array('foo', 'bar', 'baz');
}

Когда это будет выполнено, он будет эхо "foo".

Ответ 5

list() полезен здесь. С любым, кроме первого элемента массива, вам нужно будет поместить его в бесполезные переменные. Например:

list( $firstElement ) = functionThatReturnsAnArray();
list( $firstElement , $secondElement ) = functionThatReturnsAnArray();

И так далее.

Ответ 6

Либо current($array), либо array_shift($array) будет работать, первый из них оставит массив неповрежденным.

Ответ 7

Вы можете использовать array_slice(), например:

$elementX = array_slice(functionThatReturnsAnArray(), $x, 1);

Также заметил, что end() не упоминается. Он возвращает последний элемент массива.

Ответ 8

Я действительно использую функцию удобства, которую я написал для таких целей:

/**
 * Grabs an element from an array using a key much like array_pop
 */
function array_key_value($array, $key) {
    if(!empty($array) && array_key_exists($key, $array)) {
        return $array[$key];
    }
    else {
        return FALSE;
    }
}

тогда вы просто вызываете его так:

$result = array_key_value(getMeAnArray(), 'arrayKey');

Ответ 9

nickf, приятно знать, спасибо. К сожалению, у него есть проблемы с читабельностью, выходящие за рамки нескольких запятых.

Ответ 10

Хорошо, я нашел несколько способов получить то, что вы хотите, не вызывая другую функцию.

$firstElement = ($t = functionThatReturnsAnArray()) ? $t[0] : false;

а для строк вы можете использовать

$string = (($t = functionThatReturnsAnArray())==0) . $t[0];

.. Интересная проблема

Драко

Ответ 11

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

$element = functionThatReturnsArray();
$element = $element[0];

Таким образом, вы не используете дополнительную переменную, и это очевидно, что вы делаете.

Ответ 12

$firstItem = current(returnsArray());

Ответ 13

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

function functionThatReturnsOneElement( $arg )
{
    $result = functionThatReturnsAnArray( $arg );
    return $result[0];
}
$firstElement = functionThatReturnsOneElement();

Ответ 14

Насколько я знаю, это невозможно, я хотел сделать это сам несколько раз.

Ответ 16

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

function func($first = false) {
    ...
    if $first return $array[0];
    else return $array;
}

$array = func();
$item = func(true);

Мой php немного ржавый, но я уверен, что работает.

Вы также можете посмотреть на array_shift() и array_pop().

Возможно, это также возможно:

array(func())[0][i];

0 для функции.

Ответ 17

Иногда я меняю функцию, поэтому она может необязательно возвращать элемент вместо всего массива:

<?php
function functionThatReturnsAnArray($n = NULL) {
  return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);