如何在使用explode函数后再次使用字符串?

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 
      )

如何修复它?

在数组的每个元素前添加“abc”(注意:第一个元素需要特殊处理) - Karoly Horvath
5个回答

1
尝试以下内容:
$string = 'abc def ghi abc des abc xyz';
$string = str_replace('abc', '%abc', $string);
$arr = explode('%', $string);
print_r(arr);

这是在假设您的原始字符串不包含%字符的情况下。如果有,将上面代码中的%替换为一些肯定不会出现在您的原始字符串中的内容。


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"));

这将失败,explode需要两个参数。 - trickyzter
1
要么 用array_filter,要么 使用循环。这种组合没有意义。 - Karoly Horvath

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

他的示例在字符串中包含“abc”,如果字符串要更改,您显然会在执行explode之前进行检查。 - trickyzter

0

您可以使用 preg_split() 函数和一个(非捕获的)后顾条件来在每个 "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'
) 

(我猜你不想捕捉到第一个空元素,对吗?)


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

问题中有一个特定的 $string,答案也是如此。 - sdolgy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接