我正在尝试将字符串拆分为PHP中的字对数组。例如,如果您有输入字符串:
"split this string into word pairs please"
输出数组应该看起来像
Array (
[0] => split this
[1] => this string
[2] => string into
[3] => into word
[4] => word pairs
[5] => pairs please
[6] => please
)
一些失败的尝试包括:
$array = preg_split('/\w+\s+\w+/', $string);
给了我一个空数组,
preg_match('/\w+\s+\w+/', $string, $array);
将字符串拆分为单词对,但不重复单词。是否有捷径可寻?感谢。
答案 0 :(得分:9)
为什么不使用爆炸?
$str = "split this string into word pairs please";
$arr = explode(' ',$str);
$result = array();
for($i=0;$i<count($arr)-1;$i++) {
$result[] = $arr[$i].' '.$arr[$i+1];
}
$result[] = $arr[$i];
答案 1 :(得分:2)
如果你想用正则表达式重复,你需要某种前瞻或后瞻。否则,表达式将不会多次匹配同一个单词:
$s = "split this string into word pairs please";
preg_match_all('/(\w+) (?=(\w+))/', $s, $matches, PREG_SET_ORDER);
$a = array_map(
function($a)
{
return $a[1].' '.$a[2];
},
$matches
);
var_dump($a);
输出:
array(6) {
[0]=>
string(10) "split this"
[1]=>
string(11) "this string"
[2]=>
string(11) "string into"
[3]=>
string(9) "into word"
[4]=>
string(10) "word pairs"
[5]=>
string(12) "pairs please"
}
请注意,它不会按照您的要求重复“请”的最后一个单词,但我不确定您为什么会这样做。
答案 2 :(得分:1)
你可以explode
字符串,然后循环它:
$str = "split this string into word pairs please";
$strSplit = explode(' ', $str);
$final = array();
for($i=0, $j=0; $i<count($strSplit); $i++, $j++)
{
$final[$j] = $strSplit[$i] . ' ' . $strSplit[$i+1];
}
我认为这有效,但应该有一种更容易的解决方案。
编辑使其符合OP的规范。 - 根据codaddict
答案 3 :(得分:1)
$s = "split this string into word pairs please";
$b1 = $b2 = explode(' ', $s);
array_shift($b2);
$r = array_map(function($a, $b) { return "$a $b"; }, $b1, $b2);
print_r($r);
给出:
Array
(
[0] => split this
[1] => this string
[2] => string into
[3] => into word
[4] => word pairs
[5] => pairs please
[6] => please
)