0

私が取り組んでいるゲームの通知システムに取り組んでいます。

メッセージを文字列として保存し、「変数」を設定して、配列を介して受信したデータに置き換えることにしました。

メッセージの例:

This notification will display !num1 and also !num2

クエリから受け取る配列は次のようになります。

[0] => Array
    (
        [notification_id] => 1
        [message_id] => 1
        [user_id] => 3
        [timestamp] => 2013-02-26 09:46:20
        [active] => 1
        [num1] => 11
        [num2] => 23
        [num3] => 
        [message] => This notification will display !num1 and also !num2
    )

私がやりたいことは、!num1 と !num2 を配列の値 (11, 23) に置き換えることです。

メッセージは、 からのクエリで INNER JOIN されますmessage_tbl。注意が必要な部分はnum3、null として格納されている部分だと思います。

さまざまな種類のメッセージのすべての通知を 2 つのテーブルだけに保存​​しようとしています。

別の例は次のとおりです。

[0] => Array
    (
        [notification_id] => 1
        [message_id] => 1
        [user_id] => 3
        [timestamp] => 2013-02-26 09:46:20
        [active] => 1
        [num1] => 11
        [num2] => 23
        [num3] => 
        [message] => This notification will display !num1 and also !num2
    )
[1] => Array
    (
        [notification_id] => 2
        [message_id] => 2
        [user_id] => 1
        [timestamp] => 2013-02-26 11:36:20
        [active] => 1
        [num1] => 
        [num2] => 23
        [num3] => stringhere
        [message] => This notification will display !num1 and also !num3
    )

PHP で !num(x) を配列内の正しい値に正常に置き換える方法はありますか?

4

2 に答える 2

1

ここ:

$replacers = array(11, 23);
foreach($results as &$result) {
    foreach($replacers as $k => $v) {
        $result['message'] = str_replace("!num" . $k , $v, $result['message']);
    }
}
于 2013-02-26T15:22:43.330 に答える
1

次のように、正規表現とカスタム コールバックを使用してこれを行うことができます。

$array = array( 'num1' => 11, 'num2' => 23, 'message' => 'This notification will display !num1 and also !num2');
$array['message'] = preg_replace_callback( '/!\b(\w+)\b/', function( $match) use( $array) {
    return $array[ $match[1] ];
}, $array['message']);

このデモから、次の出力が得られることがわかります。

This notification will display 11 and also 23 
于 2013-02-26T15:23:18.120 に答える