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

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

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

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

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

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

Пытаться:

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

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

@Scott Reynen

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

 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) будет работать, первая останется без изменений.

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

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

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