为啥我不能索引mysql返回的数组? [复制]

Posted

技术标签:

【中文标题】为啥我不能索引mysql返回的数组? [复制]【英文标题】:Why can't I index the mysql returned array? [duplicate]为什么我不能索引mysql返回的数组? [复制] 【发布时间】:2012-05-21 01:29:43 【问题描述】:

可能重复:Access array returned by a function in php

代码:

$cnt = mysql_fetch_row(mysql_query("SELECT FOUND_ROWS()"))[0]

给出错误:

解析错误:语法错误,意外的'[' in 第 117 行的 index.php

同样适用于:

$cnt = (mysql_fetch_row(mysql_query("SELECT FOUND_ROWS()")))[0]

这段代码:

$cnt = mysql_fetch_row(mysql_query("SELECT FOUND_ROWS()"));
$cnt = $cnt[0];

工作正常。

这是怎么回事?

【问题讨论】:

这是 PHP 语法限制。只有 PHP 5.4 允许这样做。 @bfavaretto,有什么我可以读到的吗?还有其他类似的吗? 我找不到太多,但请查看:wiki.php.net/rfc/functionarraydereferencing 您可以使用$cnt = mysql_result(mysql_query("SELECT FOUND_ROWS()")),0)$cnt = current(mysql_fetch_row(mysql_query("SELECT FOUND_ROWS()"))) 【参考方案1】:

这不仅仅是mysql_query 的问题--相反,它是PHP will fail,也是:

function get_array() 
  return array('foo', 'bar');


echo get_array()[0];

但是,正如您所观察到的,在尝试检索元素 works fine 之前设置结果:

$arr = get_array();
echo $arr[0];

【讨论】:

这很烦人 -.- 有什么原因吗? 对于很多 PHPism 来说,这是一个价值百万美元的问题 :^) @Walkerneo 不,不是。正如 bfavaretto 已经提到的,它已在 5.4 中修复。 PHP 有很多这样的怪事。 Array dereferencing @Walkerneo 我想如果你想了解更多信息,你必须继续挖掘,但the reason 声称这个补丁被拒绝了很长时间,因为“由于内存问题的不确定性,因为我们不喜欢内存泄漏。”

以上是关于为啥我不能索引mysql返回的数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C 函数不能返回数组类型? [复制]

为啥数组的索引/列表不以 1 开头? [复制]

为啥具有负索引的数组有效? [复制]

为啥我不能在函数中返回计算出的距离(来自 Google Maps API)? [复制]

为啥需要布尔返回类型? [复制]

为啥不能比较两个 int 类型变量的值? [复制]