渐进字符串与int生成混合

时间:2015-08-11 10:47:25

标签: php mysql

我遇到一个数字生成问题,每次调用一个操作都会增加。

当值达到10时,我无法打印11,依此类推......

    $this->sql = "SELECT codice FROM accettazione ORDER BY id DESC LIMIT 1";

    if ($result = $this->hookUp->query($this->sql)) {

        if ($result->num_rows > 0) {
            while ($rw = mysqli_fetch_array($result, MYSQLI_BOTH)) {

                (int)$codice = substr($rw['codice'], -1);

                if ($codice < 9) {
                    $rw['codice'] = date("Y") . ".0000";
                } else /*if ($codice == 9 || $codice < 99)*/ {
                    $rw['codice'] = date("Y") . ".000";
                }

                echo $rw['codice'] . ++$codice;
            }
        } else {
            echo date("Y") . ".00001";
        }

    } else if ($this->hookUp->query($this->sql) === false) {
        echo "fail";
    }
}

目标是当值低于10时打印00001,低于100时打印++ 00010,低于1000时打印++ 00100,依此类推......

当代码为00010时,在00011处,该值返回00001(如果($ result-&gt; num_rows&gt; 0)不再满足)。

在mySQL表中,$ rw [&#34; codice&#34;]是一个VARCHAR。

为什么?

1 个答案:

答案 0 :(得分:1)

我猜你希望你的值显示为前导零。那就是:

     1  displayed as 00001
     9  displayed as 00009
    11  displayed as 00011
  1234  displayed as 01234

这是IBM 029 keypunch machine的要求。 (如果我猜错了,请编辑你的问题。)

使用sprintf在php中很容易。

$string_codice = sprintf('%05d', $codice); 

修改

我认为你很难做到这一点。看起来您想要一个读取2015.000012015.09876或类似字符串的字符串。但我并不自信地从您的代码中猜测您的要求。首先,我不知道数据库表中codice列中的值是什么样的。

也许你可以尝试这样的事情。

   /* assume the counter starts at zero */
   $codice = 0;
   if ($result->num_rows > 0) {
        /* fetch the counter value from the table if nay. */
        while ($rw = mysqli_fetch_array($result, MYSQLI_BOTH)) {
            (int)$codice = $rw['codice'];  /* no substr */
        }
    }
    /* add one to the value and format it YYYY.000nn */
    $codice++;
    $stringval = date("Y") . "." . sprintf('%05d', $codice); 
    echo $stringval;