2010-02-15 12 views
7

为什么我无法立即访问由explode()返回的数组中的元素?为什么我无法立即访问分解的数组元素?

例如,这不起作用:

$username = explode('.',$thread_user)[1]; 
//Parse error: syntax error, unexpected '[ 

但是这个代码:

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

我在PHP中通常不程序,所以这是相当混乱给我。

回答

4

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

+2

^真正的答案。即使你编写一个返回一个不变数组的函数,你仍然不能为函数调用编制索引(因为James的回答可能会让你相信),因为这只是语法无法工作的问题。 – Chuck 2010-02-15 22:42:05

+0

查克的评论+1 - 很明显,一些防御性编程让我尽可能避免学习PHP。 (也许我不应该在三天周末的最后一天回答问题......) – 2010-02-15 22:59:48

6

不明显的原因是如何做你想要的是explode可能会返回false。在编入索引之前应检查返回值。

+0

谢谢。我不习惯返回值的行为,我错过了,当我检查PHP手册。 – 2010-02-15 21:51:07

+0

对我而言,这总觉得有点古怪,但它很有用,并且不会比例如丑陋。必须在C中检查对malloc的调用以获得NULL返回值。 – 2010-02-15 22:06:58

+2

实际上只是PHP语法不支持这一点。你只是说它的目的是让人们检查他们的返回值? – falstro 2010-02-15 22:09:29

2

由于爆炸()返回一个数组,你可以使用其他功能,如$username = current(explode('.',$thread_user));

1

我只是用我自己的函数:

function explodeAndReturnIndex($delimiter, $string, $index){ 
    $tempArray = explode($delimiter, $string); 
    return $tempArray[$index]; 
} 

为您的示例代码,然后将:

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

以下是如何将它归为一行:

$username = current(array_slice(explode('.',$thread_user), indx,1));

其中indx是您想要从分解数组中获得的索引。我是新来的PHP,但我喜欢说爆炸阵列:)