Php 为什么可以';我不能立即访问分解的数组元素吗?

Php 为什么可以';我不能立即访问分解的数组元素吗?,php,arrays,explode,Php,Arrays,Explode,为什么我不能立即访问explode()返回的数组中的元素 例如,这不起作用: $username = explode('.',$thread_user)[1]; //Parse error: syntax error, unexpected '[ 但这一准则确实: $username = explode('.',$thread_user); $username = $username[1]; 我通常不使用PHP编程,所以这让我很困惑。不清楚如何执行您想要的操作的原因是explode可能返

为什么我不能立即访问
explode()
返回的数组中的元素

例如,这不起作用:

$username = explode('.',$thread_user)[1]; 
//Parse error: syntax error, unexpected '[
但这一准则确实:

$username = explode('.',$thread_user); 
$username = $username[1];

我通常不使用PHP编程,所以这让我很困惑。

不清楚如何执行您想要的操作的原因是
explode
可能返回
false
。在索引到返回值之前,应该先检查返回值。

实际上,PHP根本不支持这种语法。在Javascript等语言中(例如),解析器可以处理更复杂的嵌套/链接操作,但PHP不是这些语言之一。

由于explode()返回数组,因此可以使用其他函数,如
$username=current(explode('.',$thread_user))

我只使用自己的功能:

function explodeAndReturnIndex($delimiter, $string, $index){
    $tempArray = explode($delimiter, $string);
    return $tempArray[$index];
}
然后,您的示例的代码将是:

$username = explodeAndReturnIndex('.', $thread_user, 1);

以下是如何将其归结为一行:

$username=current(数组片(explode('.',$thread\u user),indx,1))


其中,
indx
是要从分解数组中获取的索引。我不熟悉php,但我喜欢说分解数组:)

它取决于版本PHP5.4不支持访问返回的数组


资料来源:

谢谢。我不习惯返回这样的值,当我查看PHP手册时,我忽略了这一点。这对我来说总是有点奇怪,但它是有用的,并且没有比在C中检查malloc调用的NULL返回更难看的了。实际上,只是PHP语法不支持这一点。你只是说这是为了让人们检查他们的返回值?不,不完全是这样。相反,我认为这是决定不支持这种语法的最有用的结果之一。James,你完全正确,PHP支持这种语法会增加另一层复杂性,因为在PHP这种软类型语言中,你不能保证函数的返回类型。然而,在其他情况下,PHP的解析器实际上允许出现这种情况。在这些情况下,PHP只需尝试它能管理的最接近的类型转换,并抛出一条警告消息。尝试访问
$userID[1]
,例如,$userID是一个整数。^真正的答案。即使您编写了一个返回不变数组的函数,您仍然无法为函数调用编制索引(正如James的回答可能让您相信的那样),因为这只是语法不起作用的问题。+1对于Chuck的评论-显然,一些防御性编程允许我尽量避免学习PHP。(也许我不应该在三天周末的最后一天回答问题……)