0

DB を使用して、PHP で文字列に対して置換タイプの操作を実行したいと考えています。例えば:

$inputString = "My name is [[name-abc]] and age [[age-25]]";

そして、次のようなDBテーブルがあります:

id    input        output
 1     name-abc    LINK_TO_ABC_PROFILE
 2     name-def    LINK_TO_DEF_PROFILE
 3     age-18      LINK_TO_AGE_18
 4     age-25      LINK_TO_AGE_25

そして、私は出力が必要です:

$outputString = "My name is LINK_TO_ABC_PROFILE and age LINK_TO_AGE_25";

preg_replace でいろいろ試してみましたが、結果が得られませんでした。次のように、DB が私の配列にあると仮定して、誰でも私のために関数を書くことができますか?

array('name-abc' => LINK_TO_ABC_PROFILE, 'name-def' => LINK_TO_DEF_PROFILE .... 'age-25' => LINK_TO_AGE_25)

前もって感謝します!

4

3 に答える 3

0
$inputString = "My name is [[name-abc]] and age [[age-25]]";
$replace = array('name-abc' => LINK_TO_ABC_PROFILE, 'name-def' => LINK_TO_DEF_PROFILE , 'age-25' => LINK_TO_AGE_25);
$keys = array();
foreach ($replace as $k => $v) {
    $keys[] = '[[' . $k . ']]';
}
$out = str_replace ( $keys ,  array_values($replace) , $inputString );

var_dump(($out));

出力:

string(53) "My name is LINK_TO_ABC_PROFILE and age LINK_TO_AGE_25"
于 2013-02-22T12:31:53.263 に答える
0
<?php
$details = array('name-abc' => LINK_TO_ABC_PROFILE, 'name-def' => LINK_TO_DEF_PROFILE .... 'age-25' => LINK_TO_AGE_25);

$outputString = "My name is ".$details['name-abc']." and age ".$details['age-25'];
?>
于 2013-02-22T12:22:07.313 に答える
0

preg_replace を使用する場合は、連想配列の代わりに 2 つの 1 次元配列をフレーム化する必要があります。次のようにしてください。

$input_arr = array();
$output_arr = array();
$query = "SELECT input,output FROM replacestrtbl";
$stmt = $mysqli->prepare($query);

if($stmt){
  $stmt->execute();
  $stmt->bind_result($input, $output);
  $i=0;
  while($res = $stmt->fetch()){
  $input_arr[$i] = '/\[\['.$input.'\]\]/';
  $output_arr[$i] = $output;
  $i++;
  }
  $stmt->close();
}

$inputString = "My name is [[name-abc]] and age [[age-25]]";

$output_string=preg_replace($input_arr,$output_arr,$inputString);

echo $output_string;
于 2013-02-22T13:01:33.047 に答える