我遇到一个数字生成问题,每次调用一个操作都会增加。
当值达到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。
为什么?
答案 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.00001
或2015.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;