0

クイズシステムを作ろうとしています。データベースに次のテーブルがあります。

CREATE TABLE fill_gap_exercise (
  quiz_id INT PRIMARY KEY,
  text VARCHAR,
  wordslist VARCHAR,
  date DATETIME
)

テーブルのデータ行の例を次に示します。

INSERT INTO fill_gap_exercise
  (quiz_id, text, wordslist, date)
VALUES
  (4, 'hello {0} up {1}', 'a:2:{i:0;s:5:"whats";i:1;s:5:"men??";}', '2012-10-29 13:24:25')

フィールド{}内の文字を置き換えようとしていますが、文にシーケンスが複数回出現すると問題が発生します。text{}

これが私のコードです:

<?php

  include('../connect_db.php');

  $myData = mysql_query('SELECT * FROM fill_gap_exercise');

  while ($row = mysql_fetch_array($myData, MYSQL_ASSOC))
  {    

    $array = unserialize($row['wordslist']);
    $text  = implode('\r\n', $array);

    echo "\n<br />";

    $pattern = '/\{(.*)\}/';
    $replace = '<input type="text" name="j_1" id="' . $row["quiz_id"] . '" />';
    $subject = $row['text'];
    $string = preg_replace($pattern, $replace, $subject);

    print $string;    
  }    
4

2 に答える 2

3

レイジー数量詞を使用する

に置き換え'/\{(.*)\}/'ます'/\{(.*?)\}/'

于 2012-10-29T11:42:17.700 に答える
0

とにかく位置カウンターが必要になる可能性が高いので、文字列から単純にフェッチしてみませんか?欲張り/非欲張りの問題を自動的に取り除きます。

例えば

<?php
$row = array("quiz_id"=>47);
$string = 'hello {0}, up {1}?';

$string = preg_replace('/{(\d+)}/', '<input type="text" name="q['.$row["quiz_id"].'][\\1]" />', $string);

echo $string;

プリント

hello <input type="text" name="q[47][0]" />, up <input type="text" name="q[47][1]" />?
于 2012-10-29T11:50:51.243 に答える