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

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

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

... Кажется, он не «берет». Мне нужно сделать это как 2-х степпер:

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

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

Ответы [ 17 ]

9 голосов
/ 16 сентября 2008

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

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

list(,,$thirdElement) = $myArray;
8 голосов
/ 16 сентября 2008

Попробуйте:

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

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

6 голосов
/ 16 сентября 2008

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

5 голосов
/ 16 сентября 2008

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

<?php

echo array_shift(i_return_an_array());

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

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

3 голосов
/ 16 сентября 2008

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

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

и т. Д.

1 голос
/ 16 сентября 2008

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

/**
 * 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');
1 голос
/ 16 сентября 2008

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

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

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

1 голос
/ 16 сентября 2008

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

0 голосов
/ 18 ноября 2008

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

function functionThatReturnsOneElement( $arg )
{
    $result = functionThatReturnsAnArray( $arg );
    return $result[0];
}
$firstElement = functionThatReturnsOneElement();
0 голосов
/ 16 сентября 2008

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

<?php
function functionThatReturnsAnArray($n = NULL) {
  return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...