2012-09-12 26 views
0

我想添加前導零到我的表中的所有skus。我需要每個SKU在它前面都有一個3位數的數字。對於1-9 skus將是001 $ row ['sku'],002 $ row ['sku'],009 $ row ['sku'],010 $ row ['sku'],011 $ row ['sku'], ],...等我使用$ n = sizeof($ row)。但每次我回應這一點,我得到22 skus(其中約50),只返回sku的第一個字母。我不明白如何解決這個問題,我試圖從我的查詢中建立一個數組,以確定有多少skus以添加前導零。任何幫助深表感謝。PHP添加基於查詢數組的前導零

$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 />`"; 
+0

你爲什麼不這樣做的SQL,可能是由於SQL視圖?哦,請使用參數化查詢而不是'mysql_query()'。 – Lucero

回答

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/>"; 
} 
+0

好點。我錯過了循環不正確的事實。可能你得到22 skus的原因是因爲你正在循環第一行中的列數。 – RobMasters

+0

當我嘗試使用您的代碼時,我只會得到「此產品SKU是SKU1」「此產品SKU是SKU2」。我的表格有2列,id和SKU。 id是自動遞增的,sku包含我的skus。我只想把001,002,... 010,011,012加到我的所有skus上,不管他們有什麼id。但是我需要一種方法來確定查詢中有多少skus。 – Sappster

+0

那麼,最終結果是... 001SKU1,002SKU2,003SKU3等?那001,002,003是由它在SQL結果集中的順序決定的嗎?我理解正確嗎? –

0

我不完全瞭解情況,但它聽起來好像要使用str_pad功能是。

例如

$num1 = str_pad(1, 3, '0', STR_PAD_LEFT); // = 001 
$num2 = str_pad(10, 3, '0', STR_PAD_LEFT); // = 010 
// etc...