【问题标题】:Explode to break line after every other comma每隔一个逗号就爆炸以换行
【发布时间】:2017-08-19 22:40:48
【问题描述】:

当我回显我的 $model 变量时,我试图在每个其他逗号之后插入换行符,该变量包含从 mysql 数据库中提取的每个产品的许多不同模型的列表。我试图用explode 来做,但是失败了,因为它只显示了 2 的第一行(model1,model2)。列表中的其他型号缺失。到目前为止我所拥有的是:

   <?php 
$commasCount = count(explode(',', $model));
if ($commasCount > 2) {
    $model = preg_replace('~,[^,]*,~', "\$0\n", $model);

}
echo $model;
 ?>

我的问题是 - 如何连续两两显示完整的模型列表,而不仅仅是前两条记录?谢谢。

【问题讨论】:

  • 你检查过 $commasCount 里面有什么吗?也许那时你会看到你应该改变什么
  • 也许$model = preg_replace('~,[^,]*,~', "\$0\n", $model) 可以吗?

标签: php regex explode


【解决方案1】:

关于

我试图在每个逗号之后插入换行符

您可以使用带有以下正则表达式的preg_replace:

$model = preg_replace('~,[^,]*,~', "\$0\n", $model);

或 - 如果您在 Web 浏览器中呈现输出:

$model = preg_replace('~,[^,]*,~', "\$0<br/>", $model);

这里是regex demo。

基本上,匹配逗号、逗号以外的 0+ 个符号(使用[^,]*),然后再次使用逗号,然后将匹配的文本替换为自身($0)并添加换行符。

【讨论】:

  • 当我这样做时,它们会回到常规视图,我可以看到它们,但它们不是两个接一个地连续显示。我的代码现在是: 2) { $model = preg_replace('~,[^,]*,~', "\$0\n", $model); } 回声 $model; ?>
  • 请提供示例输入和预期输出。
  • @Nancy:我猜你想要&lt;br&gt; 而不是\n,不是吗?
  • @Nancy:将"\$0\n" 替换为"\$0&lt;br/&gt;"。如果您在 Web 浏览器中呈现文本,这将起作用。
  • Wiktor 和 @Toto,谢谢你们,伙计们,它正在工作!
【解决方案2】:

您可以使用array_chunk 将项目两两分组:

$models = array_chunk(explode(',', $model), 2);
$pairs = array_map(function ($i) {
    return implode(',', $i);
}, $models);
$result = implode(",\n", $pairs);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-04
    • 2014-01-16
    • 1970-01-01
    • 2020-02-21
    • 2016-02-11
    • 2019-08-31
    • 1970-01-01
    • 2011-11-10
    相关资源
    最近更新 更多