любая идея, как, если в PHP возможно следующее в виде одной строки ?:
<?php
$firstElement = functionThatReturnsAnArray()[0];
... Кажется, что это не так. Мне нужно сделать это как двухступенчатый:
<?php
$allElements = functionThatReturnsAnArray();
$firstElement = $allElements[0];
... просто любопытно - другие языки, с которыми я играю, допускают такие вещи, и я достаточно ленив, чтобы пропустить это в PHP ... любое понимание ценится ...






К сожалению, с PHP это невозможно. Для этого вам нужно использовать две строчки.
Да, это один из недостатков PHP.
ну, это боль, но это же не шоу-стопор, правда? Я имею в виду, учитывая репутацию PHP как плохо сформированного и плохо управляемого кода, возможно, это и хорошо! :п
на самом деле, другие ответы, указывающие мне на список и сброс, работают хорошо - не очень красиво, но они делают то, что я хочу :-) Мне нравится этот веб-сайт!
Насколько я знаю, это невозможно, но я сам хотел сделать это несколько раз.
Пытаться:
<?php
$firstElement = reset(functionThatReturnsAnArray());
Если вы просто ищете первый элемент массива.
согласился - и в моем случае это действительно работает очень хорошо. Большое спасибо за это!
Прекрасный. Тогда огромный рефакторинг сегодня вечером!
Это работает, но теперь вам нужно потратить дополнительные мозговые циклы на перевод от reset (func ()) в func () [0], когда вы смотрите на код.
Доступно только в php версии 5.
list () здесь полезен. С любым элементом массива, кроме первого, вам нужно будет заполнить его бесполезными переменными. Например:
list( $firstElement ) = functionThatReturnsAnArray();
list( $firstElement , $secondElement ) = functionThatReturnsAnArray();
И так далее.
@ Скотт Рейнен
это не правда. Это будет работать:
list(,,$thirdElement) = $myArray;
Никф, приятно знать, спасибо. К сожалению, за пределами нескольких запятых возникают проблемы с читабельностью.
да, это правда - я избегаю этого, когда могу, но это все еще возможно! :)
Если это всегда первый элемент, вам, вероятно, следует подумать о том, чтобы функция возвращала только первый элемент в массиве. Если это наиболее частый случай, вы можете использовать немного прохлады:
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 означает функцию.
Вы может делаете это в одну строку! Используйте array_shift ().
<?php
echo array_shift(i_return_an_array());
function i_return_an_array() {
return array('foo', 'bar', 'baz');
}
Когда это будет выполнено, он отобразит «foo».
current($array) или array_shift($array) будут работать, первый оставит множество нетронутым.
Что ж, я нашел несколько способов получить то, что вы хотите, без вызова другой функции.
$firstElement = ($t = functionThatReturnsAnArray()) ? $t[0] : false;
а для строк вы можете использовать
$string = (($t = functionThatReturnsAnArray())==0) . $t[0];
.. Интересная проблема
Драко
Вы можете использовать array_slice(), например:
$elementX = array_slice(functionThatReturnsAnArray(), $x, 1);
Также заметил, что end() не упоминается. Он возвращает последний элемент массива.
Я думаю, что для любого из вышеперечисленных потребуется комментарий, чтобы объяснить, что вы делаете, таким образом, он превратится в две строки. Мне проще сделать:
$element = functionThatReturnsArray();
$element = $element[0];
Таким образом, вы не используете дополнительную переменную, и вам будет очевидно, что вы делаете.
$firstItem = current(returnsArray());
Иногда я изменяю функцию, чтобы она могла при желании возвращать элемент вместо всего массива:
<?php
function functionThatReturnsAnArray($n = NULL) {
return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);
На самом деле я использую удобную функцию, которую написал для таких целей:
/**
* 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');
Я предполагаю, что это встроенная или библиотечная функция, поскольку похоже, что вы не можете редактировать ее напрямую. Я рекомендую создать функцию-оболочку, чтобы получить нужный результат:
function functionThatReturnsOneElement( $arg )
{
$result = functionThatReturnsAnArray( $arg );
return $result[0];
}
$firstElement = functionThatReturnsOneElement();
Обновитесь до PHP 5.4, и тогда вы сможете выполнить разыменование массива. Вы можете найти это в руководстве здесь.