2012-09-12 2 views
0

테이블의 모든 skus에 선행 0을 추가하려고합니다. 모든 SKU 앞에 3 자리 숫자가 있어야합니다. 1-9 skus는 001 $ row [ 'sku'], 002 $ row [ 'sku'], 009 $ row [ 'sku'], 010 $ row [ 'sku'], 011 $ row [ 'sku' ], ... etc $ n = sizeof ($ row)를 사용하고 있습니다. 그러나 내가 이것을 에코 할 때마다 저는 22 스카스 (약 50 개가 있습니다)를 얻고 오직 스쿠의 첫 문자 만 돌려줍니다. 이 문제를 해결하는 방법을 이해할 수 없다. 쿼리에서 배열을 만들어서 앞에 오는 0을 추가하기 위해 몇 개의 skus가 있는지 확인하려고한다. 어떤 도움이라도 대단히 감사합니다.PHP 쿼리 배열을 기반으로 선행 0을 추가합니다.

$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

결과 데이터 세트를 올바르게 루핑하지 않거나 상황을 완전히 이해하지 못합니다. 당신은 str_pad function를 찾고 있습니다

// 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"입니다. 내 테이블에는 ID와 SKU라는 두 개의 열이 있습니다. id는 자동으로 증가하고 sku는 내 skus를 포함합니다. 나는 그들이 가지고있는 id에 관계없이 001, 002, ... 010, 011, 012를 내 모든 skus에만 추가하려고합니다. 그러나 얼마나 많은 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... 
0

:

각 행의 SKU를 기반으로 세 자리 SKU를 구축하려는 가정하면, 여기에 더 나은 방법입니다.

예 :

$num = str_pad($input, 4, "0", STR_PAD_LEFT); 
관련 문제