2017-08-14 140 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

获取您的数据库中的所有代码并将它们放入数组中。 –