我想以这种方式爆炸字符串
给定字符串值
$string = "Hello World Hey;
["Hello","World","Hey"]
的数组,则explode函数将是立即调用
但这是我想要实现的输出["Hello","World","Hey","Hello World","World Hey"]
有什么办法解决这个问题吗?
答案 0 :(得分:2)
如果您的目标是获取各个部分以及当前单词和下一个单词的重叠匹配,则另一种解决方案是使用表达式。
您可以使用正向超前捕获来捕获组中的重叠匹配项,还可以通过将非白字字符匹配1次以上并使用分支重置组(?|
$string = "Hello World Hey";
$res = preg_match_all("/(?|(?:^|\h)(?=(\S+ \S+))|(\S+))/", $string, $matches);
print_r($matches[1]);
结果
Array
(
[0] => Hello World
[1] => Hello
[2] => World Hey
[3] => World
[4] => Hey
)
如果您希望使用当前词和后两个词,则可以使用组和量词{2}
答案 1 :(得分:1)
<?php
$str = "Hello World Hey";
$arr = explode(" ", $str);
$res_arr = $arr;
for($i = 0; $i < count($arr); $i++)
{
if($i > 0)
{
$res_arr[] = $arr[$i - 1]." ".$arr[$i];
}
}
print_r($res_arr);
结果:
Array
(
[0] => Hello
[1] => World
[2] => Hey
[3] => Hello World
[4] => World Hey
)
答案 2 :(得分:0)
function str_arr($str) {
$arr = explode(' ', $str);
$len = count($arr);
for($i=0; $i<$len-1; $i++)
$arr[] = $arr[$i] . ' ' . $arr[$i+1];
return $arr;
}
对于上面函数的输入“ Hello World Hey”,返回此数组
["Hello","World","Hey","Hello World","World Hey"]