在一行代码中同时获取值并解构

19

你能用一行代码写出以下内容吗?

$foo = explode(":", $foo);
$foo = $foo[0];

2
请参见:https://dev59.com/PnVD5IYBdhLWcg3wVKEb - Nick Presta
2
在PHP 5.4中,你可以这样做!(http://php.net/migration54.new-features) - user212218
4个回答

21
您可以使用 stristr 来实现此功能:
$foo = stristr($foo,":",true);

"true"表示将给您返回第一个冒号之前的所有内容。


我该如何使用这个来获取第二个元素?它只会返回第一个元素。 - user1642018

7
作为list()的替代方案,您可以使用array_shift()
$foo = array_shift(explode(':', $foo));

5

是的,可以使用list来实现:

list($foo) = explode(":", $foo);

谢谢,这是一个不错的方法。但是,我希望看到一种不需要额外方法的方法。就像explode(":", $foo)[0];这样的东西。 - Emanuil Rusev
3
PHP不支持那种语法,你被迫用两行完成你想做的事情。 - Nick Presta
1
我认为PHP不像Python或Perl那样允许...[0]代码。这就是为什么list被添加到语言中的原因。 - Ivan Nevostruev

0

补充@GSto的答案,希望有所帮助:
我经常需要处理可能有0个或多个分隔符(例如冒号)的字符串。

这里是一个一行代码来处理这样的字符串:

$first = stristr($foo,":") ? stristr($foo,":",true) : $foo;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接