【问题标题】:How can I filter data from my array php?如何从我的数组 php 中过滤数据?
【发布时间】:2016-02-18 12:47:00
【问题描述】:

我真的很难过滤我的数据。我知道如何访问数组的某些部分,但在如何过滤方面很吃力。我知道如何在 SQL SUM & count 中做到这一点),但在涉及 PHP 数组时不知道,请帮忙。

我需要过滤存储在变量 $res 中的一些数据。

我需要查看每个 'REF' 出现了多少次以及每个 ref 的总 'LCL_D_CBM' 所有这些,其中“TERR”等于“TERR1”。

foreach ($res as $res1){


   if ($res1["TERR"] == "TERR1"){

   //the individual ref 
   //$res1['REF'];  


   // the coutn of how many times each ref appears
   //echo count($res1['REF']);

   //sum
   //echo array_sum($res1['LCL_D_CBM']);    



   }
}

需要结果像 -

CEA

3

2561

CEF

456

135

var_dump($res); gives me below

array(350) { 
  
[0]=> array(7) { [0]=> string(3) "CEA" ["REF"]=> string(3) "CEA" [1]=> string(5) "1.080" ["LCL_D_CBM"]=> string(5) "1.080" [2]=> string(3) "WF2" ["AREA_CODE"]=> string(3) "WF2" ["TERR"]=> string(5) "TERR1" } 
            
[1]=> array(7) { [0]=> string(3) "CEA" ["REF"]=> string(3) "CEA" [1]=> string(5) "2.000" ["LCL_D_CBM"]=> string(5) "2.000" [2]=> string(4) "HU13" ["AREA_CODE"]=> string(4) "HU13" ["TERR"]=> string(5) "TERR1" } 
            
[2]=> array(7) { [0]=> string(3) "CEF" ["REF"]=> string(3) "CEA" [1]=> string(5) "2.448" ["LCL_D_CBM"]=> string(5) "2.448" [2]=> string(4) "TW16" ["AREA_CODE"]=> string(4) "TW16" ["TERR"]=> string(5) "TERR2" } ..... etc

【问题讨论】:

  • 您第一次尝试实现该目标的代码是什么?
  • 请用换行符重新格式化。没有人愿意滚动它。
  • @bub 请查看已编辑的问题

标签: php arrays object associative


【解决方案1】:

你可以这样解决。不是一个很好的解决方案,但应该做的工作。 (我没有对此进行测试,因此它可能包含拼写错误或其他内容):

$sum_lcl = 0;
$unique_refs = array();
foreach ($res as $res1){

    if (!array_key_exists($res1['REF'], $unique_refs)) {
        $unique_refs[$res1['REF']] = array();
    }   

    $unique_refs[$res1['REF']]['SUM'] = ( array_key_exists('SUM', $unique_refs[$res1['REF']]) ) ? ( intval( $unique_refs[$res1['REF']]['SUM'] ) + 1 ) : 1;
    $unique_refs[$res1['REF']]['LCL_SUM'] = ( array_key_exists('LCL_SUM', $unique_refs[$res1['REF']]) ) ? ( floatval( $unique_refs[$res1['REF']]['LCL_SUM'] ) + floatval( $res1['LCL_D_CBM'] ) ) : 1;


}


foreach( $unique_refs AS $unique => $data ){
    $title = $unique;
    $sum = $data['SUM'];
    $lcl_sum = $data['LCL_SUM'];
    echo "{$title}<br />{$sum}<br />{$lcl_sum}";
}

【讨论】:

  • 您的代码将所有 LCL_D_CBM 相加,并且计算每个 ref 出现的次数不起作用。请查看已编辑的问题以查看我想要的结果。谢谢
  • 好吧。相应地编辑了我的答案。不过,从这一点开始,我建议您尝试自己更改它,以实际从中学习:)
  • 太棒了,你能不能把糖霜放在蛋糕上,让它像我的问题一样显示出来,这样我就可以了解它并学习它。谢谢你
  • 只需删除我回应的文本,您就会拥有它。只需回显 $unique、$key 和 $value
  • 如果你喜欢,也可以添加一些
    标签来换行
猜你喜欢
  • 1970-01-01
  • 2015-03-01
  • 2020-11-11
  • 1970-01-01
  • 2021-08-09
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
相关资源
最近更新 更多