0

我正在尝试为表中的所有 skus 添加前导零。我需要每个 sku 前面都有一个 3 位数字。对于 1-9 sku,将是 001$row['sku'], 002$row['sku'], 009$row['sku'], 010$row['sku'], 011$row['sku' ],...等我正在使用 $n=sizeof($row)。但是每次我回显这个时,我都会得到 22 个 sku(大约有 50 个),并且只返回 sku 的第一个字母。我不明白如何解决这个问题,我正在尝试从我的查询中构建一个数组,以确定有多少 skus 以添加前导零。任何帮助深表感谢。

$result = mysql_query("SELECT * FROM temp_table WHERE po='ABCD'");

$row = mysql_fetch_array($result);

    for ($i=0, $n=sizeof($row); $i<$n; $i++) {
               if ($i < 9) {
                 $Zeros="00";
               }
               elseif ($i < 99) { 
                 $Zeros="0";
                }
               else{
                 $Zeros="";
                }
               $num=$i+1;    
echo   $Zeros.$num. "=" . $row[$i]['sku'] . "`<br />`";
4

4 回答 4

1

我不完全理解上下文,但听起来好像您想使用str_pad函数。

例如

$num1 = str_pad(1, 3, '0', STR_PAD_LEFT); // = 001
$num2 = str_pad(10, 3, '0', STR_PAD_LEFT); // = 010
// etc...
于 2012-09-12T18:09:03.460 回答
1

您没有完全正确地遍历结果数据集,或者我不完全理解这种情况。

假设您想根据每一行的 SKU 构建一个三位数的 SKU,这里有一个更好的方法:

// query the database
$result = mysql_query("SELECT * FROM temp_table WHERE po='ABCD'");

$count = 0;

// Loop through every row in the data result set
while ( $row = mysql_fetch_assoc( $result ) ){ 
    $count++; // Increment SKU #

    // Build integer SKU based on count of item in order and pad with zeros
    $this_sku = str_pad( $count, 3, '0', STR_PAD_LEFT);

    // Build onto integer SKU based on row data and pad with zeros
    $this_sku .= str_pad( $row['sku'], 3, '0', STR_PAD_LEFT);

    echo "This product SKU is $this_sku<br/>";
}
于 2012-09-12T18:10:33.307 回答
0

您正在寻找str_pad 功能

例子:

$num = str_pad($input, 4, "0", STR_PAD_LEFT);
于 2012-09-12T18:11:06.527 回答
0

最优雅的方法是使用 sprintf() http://php.net/manual/en/function.sprintf.php

sprintf(%'0'3d=%d`<br />`, $num, $row[$i]['sku']);
于 2012-09-12T18:15:15.260 回答