我有一个示例代码:
$string = 'abc def ghi abc des abc xyz';
$arr = explode('abc', $string);
print_r(arr);
结果是
Array (
[0] =>
[1] => def ghi
[2] => des
[3] => xyz
)
但我想在结果段中保留“abc”,如下所示:
Array (
[0] =>
[1] => abc def ghi
[2] => abc des
[3] => abc xyz
)
如何解决?
答案 0 :(得分:1)
尝试以下方法:
$string = 'abc def ghi abc des abc xyz';
$string = str_replace('abc', '%abc', $string);
$arr = explode('%', $string);
print_r(arr);
这是假设您的原始字符串不具有%字符。如果可以,请将上面代码中的%替换为原始字符串中不会出现的内容。
答案 1 :(得分:0)
您可以使用array_filter()
:
function myExplode($var) {
foreach($var as $key=>$value) {
if($key>0) {
$var[$key] = $var[0]." ".$value;
}
}
return $var;
}
$string = "abc def ghi abc des abc xyz";
print_r(array_filter(explode("abc",$string), "myExplode"));
答案 2 :(得分:0)
$string = 'abc def ghi abc des abc xyz';
$arr = explode('abc', $string);
$new_arr = array_map(function($v){
return 'abc' . $v;
}, $arr);
print_r($new_arr);
OR为了向后兼容,你需要使用create_function,因为早期的php版本不支持匿名函数:
$delimiter = 'abc';
$string = 'test';
$func = create_function('$v', 'global $delimiter; return ($v ? $delimiter . $v : false);');
if(strstr($string, $delimiter)):
$arr = explode($delimiter, $string);
$new_arr = array_map($func, $arr);
endif;
print_r($new_arr);
答案 3 :(得分:0)
您可以将preg_split()
与(未捕获的)lookbehind条件一起使用,以在每次出现“abc”之前拆分字符串:
代码:
$subject = 'abc def ghi abc des abc xyz';
$result = preg_split('/ ?(?=abc)/', $subject, -1, PREG_SPLIT_NO_EMPTY);
结果:
Array (
[0] => 'abc def ghi'
[1] => 'abc des'
[2] => 'abc xyz'
)
(我想你没有捕获第一个空元素符合你的兴趣吗?)
答案 4 :(得分:-1)
<?php
$string = 'abc def ghi abc des abc xyz';
$arr = explode('abc', $string);
foreach($arr as $k=>$v) {
$k = 'abc ' . $v;
}
print_r($arr);
?>