0

文字列内の何かを置き換えることについてのチュートリアルや質問がたくさんあることを私は知っています。

しかし、私がやりたいことについては1つも見つかりません!

私はこのような文字列を持っているとしましょう

$string="Hi! [num:0]";

そして、このような配列の例

$array=array();
$array[0]=array('name'=>"na");
$array[1]=array('name'=>"nam");

今私が欲しいのは、PHPが最初に配列から有効なキーが[num:x]どこにあるかなどのパターンを検索する必要があるということです。x次に、それを配列の一致するキーに置き換えます。たとえば、上記の文字列は次のようになります。Hi! na

私はこのようにすることを考えていました:

  1. パターンを検索します。
  2. 見つかった場合は、番号が有効かどうかをチェックする関数を呼び出します。
  3. 有効な場合は、そのキーの配列から0や1などの名前を返します。
  4. PHPは、関数から返された値をパターンの代わりに文字列に置き換えます。

しかし、私はそのアイデアを実行する方法を見つけることができません。そのパターンを一致させ、一致するたびに関数を呼び出すにはどうすればよいですか?

これは私がやろうと思っている方法です。他の方法でも機能します。

私の質問について疑問がある場合は、コメントで質問してください。

4

2 に答える 2

1

これを試して

$string="Hi! [num:0]";
$array=array();
$array[0]=array('name'=>"na");
$array[1]=array('name'=>"nam");


echo preg_replace('#(\!)?\s+\[num:(\d+)\]#ie','isset($array[\2]) ? "\1 ".$array[\2]["name"] : " "',$string);
于 2012-07-10T07:24:54.700 に答える
0

正規表現のオーバーヘッドが不要で、文字列形式が同じままである場合。あなたが使用できる:

<?php

$string="Hi! [num:0]"; 
echo_name($string);          // Hi John
echo "<br />";
$string="Hello! [num:10]"; 
echo_name($string);          // No names, only Hello

// Will echo Hi + Name
function echo_name($string){
$array=array();
$array[0]=array('name'=>"John");
$array[1]=array('name'=>"Doe");

$string = explode(" ", $string);
$string[1] = str_replace("[num:", "", $string[1]);
$string[1] = str_replace("]", "", $string[1]);

if(array_key_exists($string[1], $array)){
    echo $string[0]." ".$array[$string[1]]["name"];
} else {
    echo $string[0]." ";
}
}// function echo_sal ENDs

?>

ライブ:http://codepad.viper-7.com/qy2uwW

仮定:

  • $ stringには、常に直前に1つのスペースしかありません[num:X]
  • [num:X]常に同じ形式です。

もちろん、入力を単純にすることができれば、str_replace行をスキップすることもできます
Hi! 0 Hello! 10

于 2012-07-10T09:16:51.063 に答える