从函数返回的PHP数组中获取元素

时间:2012-01-17 01:22:57

标签: php

我不确定这是否可行,但如果是......我无法弄清楚如何做到这一点......

我想从一个函数返回的数组中获取一个特定的元素,而不是先将它传递给一个数组......就像这样......

$item = getSomeArray()[1];


function getSomeArray(){
     $ret = Array();
     $ret[0] = 0;
     $ret[1] = 100;
     return $ret;
}

这是什么正确的语法?

7 个答案:

答案 0 :(得分:16)

PHP无法做到尚未,这是一个众所周知的限制。你有充分的权利想知道“你在开玩笑吗?”。遗憾。

如果你不介意生成E_STRICT警告,你可以随时分别用resetend拉出数组的第一个和最后一个元素 - 这意味着你可以还可以拉出任何元素,因为array_slice可以安排你想要保留的第一个或最后一个,但这可能会让事情走得太远。

但绝望不是:(此时即将推出)PHP 5.4版本将包含这个功能(名称为array dereferencing)。

更新:我只是想到了另一项可行的技术。可能有充分的理由说我从未使用过它或看过它,但从技术上说它可以完成这项工作。

// To pull out Nth item of array:
list($item) = array_slice(getSomeArray(), N - 1, 1);

答案 1 :(得分:3)

PHP 5.4添加了数组解除引用, 这是PHP的Array文档中的示例:

示例#7阵列解除引用

function getArray() {
    return ['a', 'b', 'c'];
}

// PHP 5.4
$secondElement = getArray()[0]; // output = a

// Previously
$tmp = getArray();
$secondElement = $tmp[0]; // output = a

答案 2 :(得分:2)

是的,php无法做到这一点。蝙蝠你可以使用ArrayObect,如下:

$item = getSomeArray()->{1};
// Credits for curly braces for Bracketworks    

function getSomeArray(){
     $ret = Array();
     $ret[0] = 0;
     $ret[1] = 100;
     return new ArrayObject($ret, ArrayObject::ARRAY_AS_PROPS);
}

好吧,也许不使用数字键,但我不确定。

答案 3 :(得分:2)

您所指的语法称为函数数组解除引用。它还没有实现,而且还有一个RFC for it

普遍接受的语法是将函数的返回值赋给数组,并使用$array[1]语法从中访问该值。

尽管如此,你也可以将你想要的密钥作为参数传递给你的函数。

function getSomeArray( $key = null ) {
  $array = array(
     0 => "cheddar",
     1 => "wensleydale"
  );

  return is_null($key) ? $array : isset( $array[$key] ) ? $array[$key] : false;    
}

echo getSomeArray(0); // only key 0
echo getSomeArray(); // entire array

答案 4 :(得分:1)

我知道这是一个老问题,但是,在您的示例中,您还可以使用array_pop()来获取数组的最后一个元素,(或array_shift()获取第一个元素。)

<?php
$item = array_pop(getSomeArray());


function getSomeArray(){
    $ret = Array();
    $ret[0] = 0;
    $ret[1] = 100;
    return $ret;
}

答案 5 :(得分:0)

正如其他人所说,没有直接的方法可以做到这一点,我通常只是将它分配给一个变量:

$items = getSomeArray();
$item = $items[1];


function getSomeArray(){
    $ret = Array();
    $ret[0] = 0;
    $ret[1] = 100;
    return $ret;
}

答案 6 :(得分:0)

我相当肯定在PHP中无法做到。您必须先将返回的数组分配给另一个数组,然后才能访问其中的元素,或者直接在其他函数中使用它来迭代返回的数组(即var_dump(getSomeArray()))。