使用切换语句PHP循环SQL查询结果
我有一个从数据库中选择所有内容的查询。然后,我使用foreach语句循环遍历结果。我在数据库中有一列名为CODE 此列包含21、55、51、11等数字。有时每行中都有多个代码 我想循环查看结果,并将该行的费用代码放入它自己的数组中。数组必须包含一组索引 比如说。如果该行包含代码21和11。该结果的数组将是使用切换语句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,该代码被放入零索
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";
}
}
}