【问题标题】:PHP preg_replace commas select optionPHP preg_replace 逗号选择选项
【发布时间】:2021-09-20 07:55:50
【问题描述】:

如何在选择选项中将逗号替换为刹车来更改:

到这里:

看来我当前的代码不再工作了:

// $row[1] = "enum('1','2','3','4','5','6','7','8','9','10')";
$options = explode("', '", preg_replace("/(enum|set)\('(.+?)'\)/", "\\2", $row[1]));

第一张图片的完整代码:

        $row = $db->query("SHOW COLUMNS FROM namemap LIKE 'multiplier'");
    $row = $row->fetch_row();

    $options = explode("', '", preg_replace("/(enum|set)\('(.+?)'\)/", "\\2", $row[1]));

    print("<tr><td align='left' class='header'>Multiplier:</td>");
    print("<td align='left' class='lista' colspan='2'><select name='multiplier'>");

    foreach($options as $multiplier) {
        $option = "<option ";

        if ($multiplier == $results['multiplier'])
            $option .= "selected=selected ";

        $option .= "value=".$multiplier.">" . unesc($multiplier) . "</option>";

        print($option);
    }
    print("</select></td></tr>");

【问题讨论】:

  • 你能展示你的数据源是什么样子来创建不好的图像吗?
  • 来自我的一个项目,我正在努力实现第二个项目。编辑:我添加了第一张图片的完整代码。
  • 谢谢,但仍然没有看到数据。我看到了 php 代码,但不知道数据是什么样的。你能做一个echo json_encode($row)print_r($row)吗?
  • 这是Array ( [0] =&gt; multiplier [1] =&gt; enum('1','2','3','4','5','6','7','8','9','10') [2] =&gt; YES [3] =&gt; [4] =&gt; 1 [5] =&gt; )的数据

标签: php html regex preg-replace explode


【解决方案1】:

这是我分隔枚举字符串的方法。不是最优雅的东西,但它确实有效:

$options = explode(",",str_replace("'","", str_replace('enum(', '', str_replace(')','', $row[1]))));

我也摆脱了print() 声明。您可以直接输出 html - 将 html 表示与 php 逻辑分开有助于使代码更加清晰和灵活。

<?php

$row = array("multiplier","enum('1','2','3','4','5','6','7','8','9','10')","YES","","1","");
$options = explode(",",str_replace("'","", str_replace('enum(', '', str_replace(')','', $row[1]))));
?>

<tr><td align='left' class='header'>Multiplier:</td>
<td align='left' class='lista' colspan='2'><select name='multiplier'>
<?php foreach($options as $multiplier) {
    $s='';
    if ($multiplier == $results['multiplier']) $s="selected";
?>
<option value='<?php echo $multiplier?>' <?php echo $s?>><?php echo $multiplier?></option>
<? } ?>
</select></td></tr>

【讨论】:

    【解决方案2】:

    我认为您找到了不再工作的正确位置:

    $options = explode("', '", preg_replace("/(enum|set)\('(.+?)'\)/", "\\2", $row[1]));

    原因是拆分字符串“', '”在逗号后包含一个空格,而从preg_replace返回的字符串在逗号后没有空格。

    因此,使用带有固定字符串的 explode 已不再足够,因为在数据库中输入这些值可能在逗号之后(甚至可能之前?)有或没有空格。

    一旦看到,修复可能是直截了当的。一种解决方案是在“爆炸”时也使用正则表达式模式,preg_replace 有一个姊妹函数,它被称为preg_split

    $options = preg_split("/',\s*'/", ...);
                              ^^^
                   \s : space character
                   *  : zero or more, as many as possible (greedy)
    

    因此将explodepreg_split 交换可以升级代码以处理逗号后有零个或多个空格字符的情况。

    同样,您也可以在逗号之前引入潜在的空格字符,方法是在逗号之前允许它们相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-24
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 2021-12-06
      • 2011-05-31
      相关资源
      最近更新 更多