2

複数の区切り文字を含む文字列を内破したい。私はすでにこのPHP関数でそれを展開しています:

function multiexplode ($delimiters,$string) {
    $ready = str_replace($delimiters, $delimiters[0], $string);
    $launch = explode($delimiters[0], $ready);
    return  $launch;
}

$text = "here is a sample: this text, and this will be exploded. this also | this one too :)";
$exploded = multiexplode(array(",",".","|",":"),$text);

これの出力は次のとおりです。

Array (
   [0] => here is a sample
   [1] =>  this text
   [2] =>  and this will be exploded
   [3] =>  this also 
   [4] =>  this one too 
   [5] => )
)

次の複数の区切り文字を使用して、この配列を内破できます, . | :か?

編集:

ルールを定義するには、これが最良のオプションだと思います。

$test = array(':', ',', '.', '|', ':');
$i = 0;
foreach ($exploded as $value) {
    $exploded[$i] .= $test[$i];
    $i++;
}
$test2 = implode($exploded);

の出力$test2は次のとおりです。

here is a sample: this text, and this will be exploded. this also | this one too :)

$test配列を定義する方法 (おそらく? を使用)を知る必要があるのは、preg_match()これらの値と一致, . | :し、文字列内で発生する順序で変数を配列に設定するためだけです。これは可能ですか?

4

1 に答える 1

2
function multiexplode ($delimiters,$string) {
    $ready = str_replace($delimiters, $delimiters[0], $string);
    $launch = explode($delimiters[0], $ready);
    return  $launch;
}

$string = "here is a sample: this text, and this will be exploded. this also | this one too :)";
echo "Input:".PHP_EOL.$string;

$needle = array(",",".","|",":");
$split = multiexplode($needle, $string);

$chars = implode($needle);
$found = array();

while (false !== $search = strpbrk($string, $chars)) {
    $found[] = $search[0];
    $string = substr($search, 1);
}

echo PHP_EOL.PHP_EOL."Found needle:".PHP_EOL.PHP_EOL;
print_r($found);

$i = 0;
foreach ($split as $value) {
    $split[$i] .= $found[$i];
    $i++;
}

$output = implode($split);
echo PHP_EOL."Output:".PHP_EOL.$output;

これの出力は次のとおりです。

Input:
here is a sample: this text, and this will be exploded. this also | this one too :)

Found needle:

Array
(
    [0] => :
    [1] => ,
    [2] => .
    [3] => |
    [4] => :
)

Output:
here is a sample: this text, and this will be exploded. this also | this one too :)

ここで動作することがわかります。

strpbrkこのスクリプトの機能の詳細については、こちらを参照してください。

Stack Overflow への私の最初の貢献です。お役に立てば幸いです。

于 2013-11-11T09:08:36.013 に答える