3

我有一个示例代码:

$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 
      )

如何解决?

4

5 回答 5

1

尝试以下操作:

$string = 'abc def ghi abc des abc xyz';
$string = str_replace('abc', '%abc', $string);
$arr = explode('%', $string);
print_r(arr);

这是假设您的原始字符串不包含 % 字符。如果可以,请将上面代码中的 % 替换为原始字符串中肯定不会出现的内容。

于 2012-04-18T08:41:19.767 回答
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'
) 

(我想不捕获第一个空元素符合您的利益?)

于 2012-04-19T07:25:27.017 回答
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"));
于 2012-04-18T08:45:52.323 回答
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);

或者为了向后兼容,您需要使用 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);
于 2012-04-18T08:47:00.287 回答
-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);
 ?>
于 2012-04-18T08:42:33.253 回答