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

あなたはこれを行うことができます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);

または、下位互換性のために、匿名関数は以前のphpバージョンではサポートされていないため、create_functionを使用する必要があります。

$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 に答える
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'
) 

(最初の空の要素がキャプチャされないようにすることはあなたの利益になると思いますか?)

于 2012-04-19T07:25:27.017 に答える
-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 に答える