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

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

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

... Кажется, что это не так. Мне нужно сделать это как двухступенчатый:

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

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

Обновитесь до PHP 5.4, и тогда вы сможете выполнить разыменование массива. Вы можете найти это в руководстве здесь.

hakre 02.05.2012 02:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
11
1
1 248
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

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

Да, это один из недостатков PHP.

grom 16.09.2008 06:25

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

nickf 16.09.2008 15:48

на самом деле, другие ответы, указывающие мне на список и сброс, работают хорошо - не очень красиво, но они делают то, что я хочу :-) Мне нравится этот веб-сайт!

Dave Carpeneto 16.09.2008 20:09

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

Ответ принят как подходящий

Пытаться:

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

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

согласился - и в моем случае это действительно работает очень хорошо. Большое спасибо за это!

Dave Carpeneto 16.09.2008 20:01

Прекрасный. Тогда огромный рефакторинг сегодня вечером!

Ken 18.11.2008 18:47

Это работает, но теперь вам нужно потратить дополнительные мозговые циклы на перевод от reset (func ()) в func () [0], когда вы смотрите на код.

Pavel Chuchuva 01.05.2009 06:32

http://us3.php.net/reset

Доступно только в php версии 5.

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

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

И так далее.

@ Скотт Рейнен

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

list(,,$thirdElement) = $myArray;

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

да, это правда - я избегаю этого, когда могу, но это все еще возможно! :)

nickf 16.09.2008 15:50

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

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

Другие вопросы по теме