2

文字列をpreg-replace(正規表現が必要)に置き換える方法を教えてください。

/user/{parent_id}/{action}/step/1

配列の同等の値で:

array('parent_id'=>32, 'action'=>'some');

作る:

/user/32/some/step/1

添加

これは典型的な問題なので、変数の名前が何であるかはおそらくわかりません。

4

6 に答える 6

3

使用できますstr_replace

例えば:

str_replace(array("{parent_id}", "{action}"), array(32, 'some'), "/user/{parent_id}/{action}/step/1");
于 2010-07-30T15:07:42.890 に答える
2

あなたが持っているとしましょう:

$arr = array('parent_id'=>32, 'action'=>'some');
$in =  '/usr/{parent_id}/{action}/step/1';

これは中括弧を置き換えます:

function bracelize($str) {
    return '{' . $str . '}';
}    

$search = array_map('bracelize', array_keys($arr));
$out = str_replace($search, $arr, $in);

または、PHP >= 5.3 を使用している場合は、ラムダを使用できます。

$search = array_map(function ($v) { return '{'.$v.'}';}, array_keys($arr));
$out = str_replace($search, $arr, $in);
于 2010-07-30T15:16:17.863 に答える
2
$arr = array('parent_id'=>32, 'action'=>'some');

$out = str_replace(array_keys($arr),array_values($arr),$in);

正規表現は必要ありません!

于 2010-07-30T15:07:21.877 に答える
1
$s = '/user/{parent_id}/{action}/step/1';
$replacement = array('parent_id'=>32, 'action'=>'some');
$res = preg_replace(array('/\\{parent_id\\}/', '/\\{action\\}/'), $replacement, $s);

もちろん、 も同様に使用できますstr_replace(実際、使用する必要があります)。

于 2010-07-30T15:07:16.910 に答える
0

mvds の回答を拡張する:

$in  = 'user/{parent_id}/{action}/step/1';
$arr = array('{parent_id}' => 32, '{action}' => 'some');
$out = str_replace(array_keys($arr), $arr, $in);

または:

$in    = 'user/{parent_id}/{action}/step/1';
$arr   = array('parent_id' => 32, 'action' => 'some');
$arr[] = '';
$find  = array_merge(array_keys($arr), array('{', '}'));
$out   = str_replace($find, $arr, $in);
于 2010-07-30T15:52:11.487 に答える
0
<?php
  $string = '/usr/{parent_id}/{action}/step/1';
  $pattern = array('#{parent_id}#', '#{action}#');
  $values = array('32', 'some');

  echo preg_replace($pattern, $values, $string);
?>

問題がこれより複雑でない場合は、preg_replace を str_replace に変更することをお勧めします。

編集:変数名を事前に知らないようです。その場合、このようなことができます。

<?php
  function wrap_in_brackets(&$item)
  {
    $item = '{' . $item . '}';
    return true;
  }

  $string = '/usr/{parent_id}/{action}/step/1';
  $variables = array('parent_id' => 32, 'action' => 'some');

  $keys = array_keys($variables);
  array_walk($keys, 'wrap_in_brackets');
  echo str_replace($keys, array_values($variables), $string);
?>
于 2010-07-30T15:10:48.963 に答える