2017-08-14 139 views
0

我有一個查詢從數據庫中選擇所有內容。然後,我使用foreach語句循環顯示結果。我在數據庫中有一個名爲CODE的列。使用switch語句循環SQL查詢結果PHP

此列包含數字,如21,55,51,11。有時候每行都有一個以上的代碼。

我想遍歷結果並將該行的收費代碼放入其自己的數組中。該數組必須包含一定數量的索引。

例如。如果行包含代碼21和11,此結果的陣列將

Array(
     [0]=>21 
     [1]=>0 
     [2]=>0 
     [3]=>11 
) 

所以這是在零的索引放入數組行包含的代碼21。然後它查找不在那裏的代碼55,因此它將第一個索引處的值設置爲0。尋找代碼51也是不存在的,所以它在第二個索引中輸入0。然後它會查找代碼11,因此它將11放在第三個索引中。

我該怎麼做?我嘗試使用switch語句,但是如果行中有多個代碼,它會插入大量的零。

SQL查詢

$sql_query2 = $DFS->prepare(" 

select 
     * 
from 
     TABLE 

where 

     REFERENCE= '".$ref."' 

"); 

$sql_query2->execute(); 

$result2 = $sql_query2->fetchall(); 

我目前在做

foreach($result2 as $row2) { 


    switch($row2[ 'CODE' ]) { 

     case "21": 
      $some_new_array[] = $row2[ 'AMOUNT' ]; 
      $some_new_array[] = "0"; 
      $some_new_array[] = "0"; 
      $some_new_array[] = "0"; 
      break; 

     case "55": 

      $some_new_array[] = $row2[ 'AMOUNT' ]; 
      $some_new_array[] = "0"; 
      $some_new_array[] = "0"; 
      $some_new_array[] = "0"; 
      break; 

     case "51": 
      $some_new_array[] = $row2[ 'AMOUNT' ]; 
      $some_new_array[] = "0"; 
      $some_new_array[] = "0"; 
      $some_new_array[] = "0"; 
      break; 

     case "11": 
      $some_new_array[] = $row2[ 'AMOUNT' ]; 
      $some_new_array[] = "0"; 
      $some_new_array[] = "0"; 
      $some_new_array[] = "0"; 
      break; 
     } 

} 

上面的代碼是什麼,如果有該行中一個代碼將工作。例如。如果有代碼21,它將輸入數量和3個零。但是如果有代碼21和代碼55,它將輸入兩個數字和6個零。

如果引用有兩個代碼,例如21和4.每個代碼將有兩行。

This reference has two codes so two rows are printed

標識得到任何幫助和指針。謝謝。

回答

0

你可以「爆炸」的數據(i suposed您的數據它是由「,「隔開):

foreach($result2 as $row2) { 

    $temp=explode(" ",$row2[ 'CODE' ]) 

    foreach($temp as $temp2) { 

     switch($temp2) { 

      case "21": 
       $some_new_array[] = $row2[ 'AMOUNT' ]; 
       $some_new_array[] = "0"; 
       $some_new_array[] = "0"; 
       $some_new_array[] = "0"; 
       break; 

      case "55": 

       $some_new_array[] = $row2[ 'AMOUNT' ]; 
       $some_new_array[] = "0"; 
       $some_new_array[] = "0"; 
       $some_new_array[] = "0"; 
       break; 

      case "51": 
       $some_new_array[] = $row2[ 'AMOUNT' ]; 
       $some_new_array[] = "0"; 
       $some_new_array[] = "0"; 
       $some_new_array[] = "0"; 
       break; 

      case "11": 
       $some_new_array[] = $row2[ 'AMOUNT' ]; 
       $some_new_array[] = "0"; 
       $some_new_array[] = "0"; 
       $some_new_array[] = "0"; 
       break; 
      } 
    } 
} 
+0

對不起,請檢查更新後的帖子 –

1

,如果你知道代碼存在,您可以設置一個數組和比較,否則你可以做一個查詢以獲取它們

$codes = array(21,55,51,11); 
foreach($result2 as $row2) { 
    $res = explode(" ",$row2['CODE']); 
    foreach($codes as $cc){ 
     if(in_array($cc, $res)) 
     { 
       $some_new_array[] = $row2[ 'AMOUNT' ]; 
     }else{ 
       $some_new_array[] = "0"; 
     } 
    } 
} 
+0

這個稍微工作。我遇到了一個問題,爲了測試目的,我將$ codes數組設置爲21。如果該行中存在代碼21和4,則將該值和0輸出到some_new_array中。它的因爲4不在數組中而是在行中。我如何做到這一點,如果在$ codes數組中定義的行中存在代碼,它就會在some_new_array中放置一個0。合理? –

+0

獲取您的數據庫中的所有代碼並將它們放入數組中。 –