【问题标题】:Logic for long number string pattern, adding spaces in php长数字字符串模式的逻辑,在php中添加空格
【发布时间】:2019-03-22 15:30:12
【问题描述】:

我有字符串编号:

$number = "101011004113511113";

我需要将其转换为如下格式:

$pattern = "10 101 1004 1135 11113";

我已经用这段代码成功了:

<?php

    $number = "101011004113511113";

    $pattern = "10 101 1004 1135 11113";

    $newNumber = "";

    for ($i = 0; $i < strlen($number); $i++)
    {
        if ($i == 2)
        {
            $newNumber .= " ";
        }

        if ($i == 5)
        {
            $newNumber .= " ";
        }

        if ($i == 9)
        {
            $newNumber .= " ";
        }

        if ($i == 13)
        {
            $newNumber .= " ";
        }

        $newNumber .= $number[$i];
    }

    echo $newNumber;

我想知道这个问题是否有更好的编程解决方案。由于我目前正在学习编程,我想请一位经验丰富的程序员提出意见,是否需要一些更好的编程解决方案。

【问题讨论】:

  • 这里的规则是什么?
  • 是固定索引处的空格吗?还是有其他规则?
  • 我的意思是,没有特殊的规则,我有这个数字,规则是像 $pattern 中的广告空间。
  • 这就是为什么我认为这个问题没有更好的解决方案。
  • 如果你已经知道你想要的最终结果是什么样的,为什么还要为此烦恼呢? $newNumber = $pattern;没有?

标签: php logic


【解决方案1】:

您可以使用正则表达式模式来捕获您想要的数字计数,然后用空格将它们连接起来:

preg_match('/(\d{2})(\d{3})(\d{4})(\d{5})/',$number, $result);
$result = implode(' ', array_slice($result, 1));

这只是我使用vsprintf的第二个问题:

$result = vsprintf("%d%d %d%d%d %d%d%d%d %d%d%d%d%d", str_split($number));

【讨论】:

  • 可能是模式不稳定。我认为这不是通用的
  • 我觉得这很好,模式是一样的,如果他们改变,我可以很容易地采用这个正则表达式。不错的工作。
  • 添加了一个替代方案,可能更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 2016-07-01
  • 2012-07-11
  • 1970-01-01
  • 2010-10-20
  • 2020-08-05
  • 2015-10-21
相关资源
最近更新 更多