0

伙计们,这是mysql表的输出。它显示month(Value)获取count(Total)特定疾病。现在我有一个array()12 个月的 php,我想与该数组进行比较,并发现如果对于特定月份,它们没有从表中返回的数据,则0在其他新array()的 12 个月中添加该月的数据,或者从表中找到的值。

Value | dname      | Total            
5     | Root Canal | 1         
8     | Root Canal | 1     

我在 php 中的代码

foreach($ResultArray2[1] as $key => $val){       
if(empty($row_d['Value'])){
$ResultArray2[$i][$key] = '0';
else
$ResultArray2[$i][$row_d['Value']] = $row_d['Total'];

这就是我得到的

     Array (
[1] => Array
    (
        [1] => 0
        [2] => 0
        [3] => 0
        [4] => 0
        [5] => 0
        [6] => 0
        [7] => 0
        [8] => 0
        [9] => 0
        [10] => 0
        [11] => 0
        [12] => 0
    )

[2] => Array
    (
        [5] => 1
        [8] => 1
    )

)

这就是我需要的数组(

[1] => Array
    (
        [1] => 0
        [2] => 0
        [3] => 0
        [4] => 0
        [5] => 0
        [6] => 0
        [7] => 0
        [8] => 0
        [9] => 0
        [10] => 0
        [11] => 0
        [12] => 0
    )

[2] => Array
    (

      [1] => 0
        [2] => 0
        [3] => 0
        [4] => 0
        [5] => 1
        [6] => 0
        [7] => 0
        [8] => 1
        [9] => 0
        [10] => 0
        [11] => 0
        [12] => 0
    )

)

4

2 回答 2

1

如果我理解你的问题是正确的

$finalResult = array();
while($row = mysql_fetch_object($querResult)) {
   if(!is_array($finalResult[$row->dname]) {
      $finalResult[$row->dname] = array_pad(array(), 13, 0);
   } 
   $finalResult[$row->dname][$row->Value] = $row->Total;
}

基本上,代码检查是否已经存在针对特定疾病的数组。如果不是,它会创建一个大小为 13 [忽略 0] 的数组,并用值 0 填充并随时更新该值。这里疾病成为外阵的关键。如果您愿意,可以使用疾病名称到整数 ID 的映射。在这种情况下

$finalResult[$map[$row->dname]][$row->value] = $row->Total;
于 2012-07-25T07:37:34.460 回答
0
$counts = array_fill(1,12,0);
while ($row = mysql_fetch_assoc($res)){
  $counts[$row['Value']] = $row['Total'];
}

编辑:由于您似乎想要获得所有疾病,因此将整个事情作为一个查询来完成可能会更容易,如下所示:

SELECT name,
SUM(IF(Value=1,1,0) as month1,
SUM(IF(Value=2,1,0) as month2,
SUM(IF(Value=3,1,0) as month3,
...
FROM tablename
GROUP BY name
于 2012-07-25T07:26:17.020 回答