11

任何想法如何在 PHP 中作为单行执行以下操作?:

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

......它似乎没有“接受”。我需要以两步法执行此操作:

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

...只是好奇-我使用的其他语言允许这样的事情,而且我懒得在 PHP 中错过这一点...任何见解都值得赞赏...

4

17 回答 17

9

@斯科特·雷宁

这不是真的。这将起作用:

list(,,$thirdElement) = $myArray;
于 2008-09-16T02:19:32.790 回答
8

尝试:

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

如果您只是在寻找数组的第一个元素。

于 2008-09-16T02:02:30.820 回答
6

不幸的是,这在 PHP 中是不可能的。你必须使用两条线来做到这一点。

于 2008-09-16T01:57:41.097 回答
5

可以在一行中完成此操作!使用array_shift()

<?php

echo array_shift(i_return_an_array());

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

执行此操作时,它将回显“ foo”。

于 2008-09-16T04:03:45.520 回答
3

list() 在这里很有用。对于除第一个数组元素之外的任何元素,您都需要用无用的变量填充它。例如:

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

等等。

于 2008-09-16T02:15:51.490 回答
1

要么 要么current($array)array_shift($array)工作,前者将保持阵列完好无损。

于 2008-09-16T07:34:38.320 回答
1

你可以array_slice()像这样使用:

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

还注意到end()没有提到。它返回数组的最后一个元素。

于 2008-09-16T09:25:13.360 回答
1

我实际上使用了我为此目的编写的便利函数:

/**
 * 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');
于 2008-09-16T16:58:07.517 回答
0

nickf,很高兴知道,谢谢。不幸的是,除了几个逗号之外,还有可读性问题。

于 2008-09-16T02:33:54.440 回答
0

好吧,我找到了几种方法来获得你想要的东西,而无需调用另一个函数。

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

对于你可以使用的字符串

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

.. 有趣的问题

德拉科

于 2008-09-16T08:19:24.690 回答
0

我认为以上任何一项都需要评论来解释你在做什么,因此变成两行。我发现这样做更简单:

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

这样一来,您就没有使用额外的变量,而且很明显您在做什么。

于 2008-09-16T13:55:33.133 回答
0
$firstItem = current(returnsArray());
于 2008-09-16T14:28:45.033 回答
0

我猜这是一个内置或库函数,因为听起来你不能直接编辑它。我建议创建一个包装函数来为您提供所需的输出:

function functionThatReturnsOneElement( $arg )
{
    $result = functionThatReturnsAnArray( $arg );
    return $result[0];
}
$firstElement = functionThatReturnsOneElement();
于 2008-11-18T15:41:36.287 回答
-1

据我所知,这是不可能的,我曾多次想自己做这件事。

于 2008-09-16T01:57:59.910 回答
-1

http://us3.php.net/reset

仅在 php 版本 5 中可用。

于 2008-09-16T02:08:52.037 回答
-1

如果它总是第一个元素,您可能应该考虑让函数只返回数组中的第一项。如果这是最常见的情况,您可以使用一点冷静:

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 代表函数。

于 2008-09-16T02:39:51.963 回答
-1

有时我会更改函数,因此它可以选择返回一个元素而不是整个数组:

<?php
function functionThatReturnsAnArray($n = NULL) {
  return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);
于 2008-09-16T15:59:23.990 回答