如果所有值都等于 0,则删除数组中的系列

我想查看一个名为$rows. 对于 中的每个不同系列ifDesc,如果全部 Octets0删除它们,但是如果单个条目 > 0,则保留整个系列,包括该不同的 0ifDesc

我尝试使用 foreach 使用 PHP 或 JavaScript(因为它作为 ajax 响应传递)循环遍历这个,但是我在使用不同的 ifDesc

这是为了可读性而编码的数组 json。

当这些数据被传递到图表时,我希望消除图表底部所有值都为 0 的一系列线。在上面的数组中,我希望删除imq0 - Inlo - In&lo - Out作为 all Octets= 0的总和。

明月笑刀无情
浏览 152回答 3
3回答

牛魔王的故事

在 Ghost 的回答的帮助下,我们计算了每个不同的总和,ifDesc如果它 > 0,我们将添加到一个新数组中。$ifDescs = array_unique(array_column($rows, 'ifDesc'));$recalculatedRows = [];foreach ($ifDescs as $currentIfDesc) {    $current_batch = [];    foreach ($rows as $k => $row) {        if ($row['ifDesc'] === $currentIfDesc) {            $current_batch[$k] = $row;        }    }    if (array_sum(array_column($current_batch, 'Octets')) > 0) { //sum of Octets > 0 ?        foreach ($current_batch as $r) { //if yes, loop through $current_batch            $recalculatedRows[] = $r; //adding series to new array        }    }}echo json_encode($recalculatedRows);

慕容708150

我会做的一种方法是先获取所有ifDescs。收集所有 em 后,您可以开始处理实际数组以删除ifDesc总和为零的s批次。$ifDescs = array_unique(array_column($rows, 'ifDesc')); // get all ifDescsforeach ($ifDescs as $currentIfDesc) { // loop each ifDesc batches    $current_batch = []; // set initial batch of ifDesc type for temporary container    foreach ($rows as $k => $row) { // group them first        if ($row['ifDesc'] === $currentIfDesc) {            $current_batch[$k] = $row;        }    }    $non_zero_octets = array_sum(array_column($current_batch, 'Octets')) > 0; // get all octets of the current batch iteration, and check if its greater than one when summed    if (!$non_zero_octets) { // if not greater than zero        $rows = array_diff_key($rows, array_keys($current_batch)); // remove em using all the keys    }}但对于它的价值。我同意 Barmar 使用查询的解决方案,以便它可以更好地扩展。
打开App,查看更多内容
随时随地看视频慕课网APP