如何在PHP中分割字符串?
我一直在试图创造条件,采取一个字符串 做这与它的功能 - 如果提交的字符串是的“HelloWorld:GoodbyeWorld”的功能,将创建一个数组,其内容会的HelloWorld和GoodbyeWorld ,所以 (“HelloWorld”,“GoodbyeWorld”)。这是我的代码。如何在PHP中分割字符串?
function parseBadges($str) {
$realstr=$str;
$badges = array();
while(strpos($realstr, ':') !== false) {
array_push($badges, substr(0, strpos($realstr,':')));
$realstr = substr(0, strpos($realstr, ':'));
}
return badges;
}
尝试var_dump(parseBadges(“FavoerDoer:”));返回
array(1) { [0]=> bool(false) }
不知道为什么会发生这种情况,有什么想法?
它不起作用,因为您正在以复杂的方式执行一项简单的任务。 请考虑:
function parse_badges($str) {
return (is_string($str))?explode(':',$str):false;
}
说明:
- 函数需要一个字符串=>
$str
。 - 如果传递的变量不是字符串返回false =>
(is_string)? ... :false;
- 如果它是一个字符串
explode()
将分裂您选择的字符您的字符串,并返回一个包含子字符串数组。
更多阅读:PHP explode()
编辑
如果你想避免空的结果就像word1:word2:
,将返回的3数组的最后一个单元格是空的。我们可以简单地添加array_filter()
:
function parse_badges($str) {
return (is_string($str))?array_filter(explode(':',$str)):false;
}
的array_filter
将默认删除空细胞。
谢谢。不能相信PHP有它的功能。要标记为5分钟回答 –
其实它的共同点。在JS中,在PHP中调用'split()'时,'explode()'的负值是'implode()'。玩的开心! –
最好的答案得益于解释... –
function parseBadges($str)
if(strpos($str, ':') !== false)
$badges = explode(':', $str);
return $badges;
}
return false;
}
print_r($badges);
$str= "HelloWorld:GoodbyeWorld:HiThere:";
function parseBadges($str) {
return preg_split('/:/i', $str, null, PREG_SPLIT_NO_EMPTY);
}
print_r(parseBadges($str));
输出:
(
[0] => HelloWorld
[1] => GoodbyeWorld
[2] => HiThere
)
正确 - 但为了这么简单的任务,为什么转向正则表达式 - 有一个性能成本:[explode vs preg_split](http://micro-optimization.com/explode-vs-preg_split.html) –
@ShomiHassid如果你需要检查'if(EMPTY($ string)')是否也会有性能成本。 –
例如,如果你做parseBadges( 'ABC1:ABC2:ABC3:'),它应该返回一个数组( “ABC1” “abc2”,“abc3”) –
只是为了让你知道,尽管有很好的解释,你接受的答案对'abc1:abc2:abc3:'最后一场比赛将是空白的。 –