2

preg_replace を使用して、件名のトークンを値に置き換えたいと思います。件名のトークンは疑問符、または名前付きパラメーターです。(PDOスタイルを考えてください)

値の1つに疑問符自体が含まれるまで、私の現在のアプローチはうまく機能します。(または名前付き変数。) その場合、システム全体がおかしくなります: 置き換えられた値の疑問符は、それ自体が次の値に置き換えられます。

基本的に、$values 配列で見つかったものは何も置き換えたくありません。したがって、preg_replace の「再帰的」な性質をやめたいと思います。

それを回避する最善の方法は何ですか?

孤立した例:

<?php

// Values that will be replaced
$values = array (1, 2, 'bla bla ? bla', 'NULL', 4, 'woop woop', 'waap waap');

// Keys used for replacing
$keys = array ('/[?]/', '/[?]/', '/[?]/', '/[?]/', '/[?]/', '/:testvar1/', '/:testvar2/');

// Original text
$original = ":testvar1, ?, ?, ?, ?, ?, :testvar2";

// Actual replaced text
$actual = preg_replace ($keys, $values, $original, 1);

// Expected replaced text
$expected = "woop woop, 1, 2, bla bla ? bla, NULL, 4, waap waap";

echo '<pre>';
echo "Actual:\n";
echo $actual . "\n\n";
echo "Expected:\n";
echo $expected . "\n\n";
echo "Result:\n";

if ($actual == $expected)
{
    echo '<span style="color: green;">Success!</span>';
}
else
{
    echo '<span style="color: red;">Failure!</span>';   
}

任意のヒント?:-) ありがとう!

4

2 に答える 2

0

preg_replace_callback次のように、置換を手動で割り当てることができるように使用します。

$values = [1,2,'bla bla ? bla','NULL',4];
$original = "?, ?, ?, ?, ?";
$actual = preg_replace_callback("/[?]/",function($m) use (&$values) {
    return array_shift($values);
});

終わり!

于 2013-10-19T15:20:13.290 に答える