【问题标题】:Getting element from PHP array returned by function从函数返回的 PHP 数组中获取元素
【发布时间】:2012-02-11 21:37:02
【问题描述】:

我不确定这是否可能,但如果是的话,我不知道该怎么做......

我想从函数返回的数组中获取特定元素,而无需先将其传递到数组中...像这样...

$item = getSomeArray()[1];


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

正确的语法是什么?

【问题讨论】:

标签: php


【解决方案1】:

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

【讨论】:

  • 哇...多么奇怪...好吧...不用担心...我将通过临时保持器数组传递它。非常感谢。
  • 添加到 PHP 5.4 见下文
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    普遍接受的语法是将函数的返回值分配给一个数组,并使用$array[1]syntax 访问该值。

    也就是说,您也可以将所需的键作为参数传递给您的函数。

    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】:

      是的,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);
      }
      

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

      【讨论】:

      • 那会引起致命的;你需要做getSomeArray()->{1}; 对任何不符合要求的属性名称使用大括号;相关信息见SimpleXML的基本用法。
      【解决方案5】:

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

      <?php
      $item = array_pop(getSomeArray());
      
      
      function getSomeArray(){
          $ret = Array();
          $ret[0] = 0;
          $ret[1] = 100;
          return $ret;
      }
      

      【讨论】:

      • 谢谢...这根本不是我的本意,尽管我可以通过一组 2 个项目看到它如何被误解为我正在寻找的东西。我试图弄清楚如何获取函数直接返回的数组元素。从那以后,我已经放弃了 PHP,因为它是一个巨大的热气腾腾的粪便,并且没有回头。不过谢谢! :)
      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

        我相当肯定这在 PHP 中是不可能的。您必须先将返回的数组分配给另一个数组,然后才能访问其中的元素或直接在其他一些将遍历返回的数组的函数中使用它(即 var_dump(getSomeArray()) )。

        【讨论】:

          猜你喜欢
          • 2012-08-03
          • 2023-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多