爆炸时如何再次使用字符串

时间:2012-04-18 08:33:59

标签: php

我有一个示例代码:

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

如何解决?

5 个答案:

答案 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);
 ?>