【问题标题】:Loop SQL query results with a switch statement PHP使用 switch 语句 PHP 循环 SQL 查询结果
【发布时间】:2017-08-14 09:06:10
【问题描述】:

我有一个从数据库中选择所有内容的查询。然后,我使用 foreach 语句循环遍历结果。我在数据库中有一个名为 CODE 的列。

此列包含诸如 21、55、51、11 之类的数字。有时每一行中都有多个代码。

我想遍历结果并将该行的费用代码放入它自己的数组中。数组必须包含一定数量的索引。

例如。如果该行包含 CODE 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。每个代码将有两行。

感谢任何帮助和指点。谢谢。

【问题讨论】:

    标签: php arrays foreach switch-statement


    【解决方案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";
            }
        }
    }
    

    【讨论】:

    • 这有点作用。我遇到了一个问题,我将 $codes 数组设置为 21 以进行测试。如果行中有代码 21 和 4,则将金额和 0 输出到 some_new_array 中。它放 0 因为 4 不在数组中,但在行中。如果在 $codes 数组中定义的行中有一个代码,我怎样才能让它在 some_new_array 中放置一个 0。有意义吗?
    • 首先从您的数据库中获取所有代码并将它们放入数组中。
    【解决方案2】:

    您可以“爆炸”您的数据(我假设您的数据用“”分隔):

    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;
              }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 2018-08-05
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多