Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用切换语句PHP循环SQL查询结果_Php_Arrays_Foreach_Switch Statement - Fatal编程技术网

使用切换语句PHP循环SQL查询结果

使用切换语句PHP循环SQL查询结果,php,arrays,foreach,switch-statement,Php,Arrays,Foreach,Switch Statement,我有一个从数据库中选择所有内容的查询。然后,我使用foreach语句循环遍历结果。我在数据库中有一列名为CODE 此列包含21、55、51、11等数字。有时每行中都有多个代码 我想循环查看结果,并将该行的费用代码放入它自己的数组中。数组必须包含一组索引 比如说。如果该行包含代码21和11。该结果的数组将是 Array( [0]=>21 [1]=>0 [2]=>0 [3]=>11 ) 因此,该行包含代码21,该代码被放入零索

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

此列包含21、55、51、11等数字。有时每行中都有多个代码

我想循环查看结果,并将该行的费用代码放入它自己的数组中。数组必须包含一组索引

比如说。如果该行包含代码21和11。该结果的数组将是

Array(
      [0]=>21
      [1]=>0
      [2]=>0
      [3]=>11
)
因此,该行包含代码21,该代码被放入零索引处的数组中。然后它查找不存在的代码55,因此它在第一个索引处放置一个0。查找代码51,该代码也不存在,因此它在第二个索引中放入0。然后它查找代码11,代码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。每个代码将有两行


我非常感谢任何帮助和指点。谢谢。

您可以“爆炸”您的数据(我发现您的数据以“”分隔):


如果知道存在哪些代码,可以设置一个数组并进行比较,否则可以进行查询以获取它们

$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_数组中。它放置0,因为4不在数组中,但在行中。如果行中有一个未在$codes数组中定义的代码,如何使它不在某个新数组中放入0。有意义吗?首先从数据库中获取所有代码并将它们放入数组中。
$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";
        }
    }
}