只是想知道为什么这种语法在PHP中不起作用?大多数人使用什么解决方法 - 如果你想编写简洁的单行代码?
$str = explode(" ", "foo bar")[0];
// thought $str would be $foo. instead I get error.
// guess I hadn't noticed this issue before.
答案 0 :(得分:2)
PHP不可链接,这意味着您无法将explode
函数与访问者(例如[0]
)结合使用。你想要做的是:
$arr = explode(" ", "foo bar");
$str = $arr[0];
“可链接”可能不是正确的词,但无论如何,你不能组合这样的功能。
答案 1 :(得分:2)
正如人们所说,不可能那样做。如果你真的,真的希望在一行中完成,你可以使用三元语句。
$str = ($tmp=explode(" ", "foo bar")) ? $tmp[0] : '';
echo $str; // "foo"
如果将其包装成函数,这看起来会“不那么难看”。
function single_explode($delim, $str, $index) {
return ($tmp=explode($delim, $str)) ? $tmp[$index] : '';
}
$str = single_explode(" ", "foo bar", 0);
echo $str;
答案 2 :(得分:0)
另一种方法是使用array_shift
,它会丢弃数组的第一个元素并将其返回。
<?php
echo array_shift(explode(" ", "foo bar")); // === foo
?>
见full example。不要在严格模式下使用它。