首先汇总数组,然后推入数组循环解

时间:2016-03-30 07:59:52

标签: php arrays

我遇到了这个特殊代码的问题。条件是:

  • $rows['Machine#']不在数组中时,请推入$machineArr数组并取消设置$totalTimeArr数组。

  • $rows['Machine#']位于数组中时,请将$rows['TotalTime']推送到$totalTimeArr数组中以进行添加。

  • 在推入阵列之前,应先更新
  • $graphArr[]array_sum($totalTimeArr)}。

  • 每台机器只有一个$graphArr[]

我现在对第三个条件有疑问。它不首先计算,而是推送第一个数据输入。我尝试使用do while循环,将$graphArr[] = '["'.$rows['Machine#'].'",'.array_sum($totalTimeArr).']';置于if else循环之外,但这似乎是我能够达到的最接近的循环。其他代码似乎没有任何问题,并且运作良好。感谢您的建议/建议/协助。以下是代码。

while ($rows = mysqli_fetch_array($conn))
    {
        if(!(in_array($rows['Machine#'], $machineArr)))
        {
            unset($totalTimeArr);
            $machineArr[] = $rows['Machine#'];
            $totalTimeArr[] = $rows['TotalTime'];
            $graphArr[] = '["'.$rows['Machine#'].'",'.array_sum($totalTimeArr).']';
        }
        else if(in_array($rows['Machine#'], $machineArr))
        {
            $totalTimeArr[] = $rows['TotalTime'];
        }
    }
编辑:我目前正在谈论这个问题:

while ($rows = mysqli_fetch_array($conn)) 
{
        $exists = false;
        if( in_array($rows['Machine#'], $machineArr) ) 
        { 
            $exists = true; 
        }

        $totalTimeArr[] = $rows['TotalTime'];
        if($exists === false) 
        {
            $totalTimeArr = array();
            $machineArr[] = $rows['Machine#'];
            $totalTimeArr[] = $rows['TotalTime'];
        }

        $graphArr[] = '["'.current($machineArr).'",'.array_sum($totalTimeArr).']';
        next($machineArr);
    }

结果:

Array ( [0] => ["09CS1", 1.4]
        [1] => ["08CS1", 1  ]
        [2] => ["06CS1", 1  ]
        [3] => [""     , 1.5]
        [4] => ["02CS2", 1  ]
        [5] => ["01CS2", 20 ]
        [6] => [""     , 40 ]
        [7] => ["01CS1", 1  ]
)

如何删除["", 1.5]["", 40]

以下是数据库:

The database:

2 个答案:

答案 0 :(得分:0)

稍微修改了您的代码版本

$machineArr = Array();
while ($rows = mysqli_fetch_array($conn)) {
    $exists = false;
    if( in_array($rows['Machine#'], $machineArr) ) { $exists = true; }

    $totalTimeArr[] = $rows['TotalTime'];
    if($exists === false) {
        unset($totalTimeArr);
        $machineArr[] = $rows['Machine#'];
        $totalTimeArr[] = $rows['TotalTime'];
        $graphArr[] = '["'.$rows['Machine#'].'",'.array_sum($totalTimeArr).']';
    }
}

将检查转换为一个in_array()搜索,然后使用===按位运算符进行比较以评估条件。同时将$machineArr定义为Array()作为循环中的第一次检查,因为$machineArr(因为我没有看到while循环之前的代码),所以总是会失败未定义。

答案 1 :(得分:0)

我不确定你需要做什么,如果你需要一个特定类型的机器的运行总和,那么做一些类似的事情:

$totalTileArr = [];

while ($rows = mysqli_fetch_array($conn)) {
    if (!isset($totalTileArr[$rows['Machine#']])) { 
        $totalTileArr[$rows['Machine#']] = [];
    }
    $totalTimeArr[$rows['Machine#']][] = $rows['TotalTime'];
    $graphArr[$rows['Machine#']] = '["' . $rows['Machine#'] . '",' . array_sum($totalTimeArr[$rows['Machine#']]) . ']';    
}