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

StackOverflow https://stackoverflow.com/questions/68711

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

Попробуй:

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

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

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

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

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

list(,,$thirdElement) = $myArray;

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

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

<?php

echo array_shift(i_return_an_array());

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

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

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

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

И так далее.

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

/**
 * 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');

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

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

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

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

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

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

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

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

$firstItem = current(returnsArray());

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

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

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

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

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

Драко

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

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

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

http://us3.php.net/reset

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

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

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 означает функцию.

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

<?php
function functionThatReturnsAnArray($n = NULL) {
  return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top