【问题标题】:accessing array values without square brackets in php在php中访问不带方括号的数组值
【发布时间】:2010-03-23 01:15:30
【问题描述】:

在 php 中,如何在不使用方括号的情况下访问数组的值?我的特殊问题是我想访问函数返回的数组元素。说 function(args) 返回一个数组。为什么是 $var = 函数(args)[0]; 关于方括号对我大喊大叫?我可以做类似的事情吗 $var = function(args).value(0); 还是我错过了一些非常基本的东西?

【问题讨论】:

标签: php arrays square-bracket


【解决方案1】:

正如其他人所说,您几乎必须使用临时变量:

$temp = myFunction();
$value = $temp[0];

但是,如果知道返回的数组的结构,就可以避免临时变量。

如果你只想要第一个成员:

$value = reset(myFunction());

如果你想要最后一个成员:

$value = end(myFunction());

如果你想要介于两者之间的任何一个:

// second member
list(, $value) = myFunction();

// third
list(, , $value) = myFunction();

// or if you want more than one:

list(, , $thirdVar, , $fifth) = myFunction();

【讨论】:

  • 嘿,聪明! list() 总是让我惊讶。 +1。
  • reset() 和 end() 要求参数是引用。在最新版本的 php 中,您会收到 E_STRICT 通知。
  • 是的,我一直在使用临时变量执行此操作,但想知道我是否真的需要这样做。现在我只是想知道为什么我必须这样做。但无论如何,您的 list() 用法非常聪明。谢谢!
【解决方案2】:

在 PHP 中,当获取一个数组作为函数结果时,很遗憾您必须做一个额外的步骤:

$temp_array = function($args);
$var = $temp_array[0];

对于对象,这在 PHP 5 中已经放宽了。你可以这样做:

$echo function($args)->property;

(前提是function当然会返回一个对象。)

【讨论】:

  • 这很糟糕,但这是唯一的方法。讨厌 PHP 的众多原因之一。
  • @Luke 是真的,但不是 那个 糟糕的 imo。谁知道呢,它可能会在 PHP 7 中得到修复 :)
  • @Luke - 这有点强,不是吗?
【解决方案3】:
function getKey($array, $key){
    return $array[$key];
}

$var = getKey(myFunc(args), $key);

不幸的是,如果不添加用户功能,就无法做到这一点。它只是不是语法的一部分。

你总是可以用老式的方式来做

$array = myFunc();
$value = $array[0];

【讨论】:

    【解决方案4】:

    完全符合您期望的是:

    echo pos(array_slice($a=myFunc(), pos(array_keys(array_keys($a), 'NameOfKey'));
    

    回答 Kinetix Kin,台北

    【讨论】:

      【解决方案5】:

      如果你想要这个,最好返回一个对象(不幸的是,它完全蹩脚的 php 不支持这个)。出于新奇,这是我能够弄清楚的一种疯狂方式(请不要这样做!):

      function returnsArray(){
          return array("foo" => "bar");
      }
      
      echo json_decode(json_encode((object)returnsArray()))->foo;
      //prints 'bar'
      

      所以是的..直到他们在 php 中添加对数组取消引用的支持,我认为您可能应该将返回数组转换为对象:

      return (object)array("foo" => "bar");
      

      然后你可以做returnsArray()->foo,因为php放宽了对象而不是数组的解引用..或者当然像其他人建议的那样编写一个包装函数。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-22
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      相关资源
      最近更新 更多