【问题标题】:single multidimensional array check with other index values php单个多维数组检查其他索引值php
【发布时间】:2019-05-29 00:10:48
【问题描述】:

这是我的数组,我想检查一个索引值以保留其他索引值,如果 product_id 值相同,则为 total_qty 的总和。我被困在这种情况下。我需要帮助。提前谢谢你。

Array
(
    [0] => Array
        (
            [iProduct_id] => 1
            [fTotal_qty] => 200
        )

    [1] => Array
        (
            [iProduct_id] => 2
            [fTotal_qty] => 400
        )

    [2] => Array
        (
            [iProduct_id] => 6
            [fTotal_qty] => 500
        )

    [3] => Array
        (
            [iProduct_id] => 4
            [fTotal_qty] => 300
        )

    [4] => Array
        (
            [iProduct_id] => 5
            [fTotal_qty] => 200
        )

    [5] => Array
        (
            [iProduct_id] => 6
            [fTotal_qty] => 200
        )

    [6] => Array
        (
            [iProduct_id] => 1
            [fTotal_qty] => 300
        )

)

我想要这样的输出

product_id = 1
total_qty = 500

product_id = 2
total_qty = 400

product_id = 6
total_qty = 700

product_id = 4
total_qty = 300

product_id = 5
total_qty = 200

【问题讨论】:

  • 你能告诉我们你的努力吗?
  • 数据是否来自db?如果是...这应该使用(mysql)查询来完成
  • 你可以在这里看到 6 个索引没有相同的 iProduct_id 为 1,值为 300。所以我想求和,当 product_id 相同时,我想要这个 product_id = 1 total_qty = 500跨度>

标签: php arrays for-loop multidimensional-array foreach


【解决方案1】:

试试这个以获得完整的细节

    <?php
        $array = array(array("iProduct_id" => "1", "fTotal_qty" => 200), array("iProduct_id" => "2", "fTotal_qty" => 400), array("iProduct_id" => "1", "fTotal_qty" => 100), array("iProduct_id" => "2", "fTotal_qty" => 600));

        $res  = array();
        foreach($array as $vals){
            if(array_key_exists($vals['iProduct_id'],$res)){
                $res[$vals['iProduct_id']]['fTotal_qty']    += $vals['fTotal_qty'];
                $res[$vals['iProduct_id']]['iProduct_id']        = $vals['iProduct_id'];
            }
            else{
                $res[$vals['iProduct_id']]  = $vals;
            }
        }
  foreach ($res as $val) {
        echo 'product_id = ' . $val['iProduct_id'].'<br>';
    echo 'total_qty = ' . $val['fTotal_qty'].'<br>' ;
}

    ?>

输出

product_id = 1
total_qty = 300
product_id = 2
total_qty = 1000

【讨论】:

  • 祝你有美好的一天
【解决方案2】:

为什么不使用 PHP Sorting functions 来优化排序。在 PHP 7 中,您可以使用:

$array = array (
    0 => array ("iProduct_id" => 1,"fTotal_qty" => 200),
    1 => array ("iProduct_id" => 2,"fTotal_qty" => 400),
    2 => array ("iProduct_id" => 6, "fTotal_qty" => 500),
    3 => array ("iProduct_id" => 4, "fTotal_qty" => 300),
    4 => array ("iProduct_id" => 5, "fTotal_qty" => 200),
    5 => array ("iProduct_id" => 6, "fTotal_qty" => 200),
    6 => array ("iProduct_id" => 1, "fTotal_qty" => 300)
);

// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
usort($array, function ($item1, $item2) {
    return $item2['fTotal_qty'] <=> $item1['fTotal_qty'];
});
echo(print_r($array,1));

【讨论】:

    【解决方案3】:
    <?php
    
    $array = [
        '0' =>
            [
                'iProduct_id' => 1,
                'fTotal_qty' => 200
            ],
    
        '1' =>
            [
                'iProduct_id' => 2,
                'fTotal_qty' => 400
            ],
    
        '2' =>
            [
                'iProduct_id' => 6,
                'fTotal_qty' => 500
            ],
    
        '3' =>
            [
                'iProduct_id' => 4,
                'fTotal_qty' => 300
            ],
    
        '4' =>
            [
                'iProduct_id' => 5,
                'fTotal_qty' => 200
            ],
    
        '5' =>
            [
                'iProduct_id' => 6,
                'fTotal_qty' => 200
            ],
    
        '6' =>
            [
                'iProduct_id' => 1,
                'fTotal_qty' => 300
            ]
        ];
    
    $result = [];
    
    foreach ($array as $key => $value){
        if (array_key_exists($value['iProduct_id'], $result)) {
            $result[$value['iProduct_id']] += $value['fTotal_qty'];
        } else {
            $result[$value['iProduct_id']] = $value['fTotal_qty'];
        }
    }
    
    foreach ($result as $k => $v) {
        echo 'product_id = ' . $k . PHP_EOL;
        echo 'total_qty = ' . $v . PHP_EOL;
    }
    

    结果:

    product_id = 1
    total_qty = 500
    product_id = 2
    total_qty = 400
    product_id = 6
    total_qty = 700
    product_id = 4
    total_qty = 300
    product_id = 5
    total_qty = 200
    

    【讨论】:

      【解决方案4】:

      通过以下代码,您可以获得您期望的结果。

      <?php
      
      $array = Array
      (   Array
              (
                  "iProduct_id" => "1",
                  "fTotal_qty" => "200",
              ),
              Array
              (
                  "iProduct_id" => "2",
                  "fTotal_qty" => "400",
              ),
              Array
              (
                  "iProduct_id" => "6",
                  "fTotal_qty" => "500",
              ),
              Array
              (
                  "iProduct_id" => "4",
                  "fTotal_qty" => "300",
              ),
              Array
              (
                  "iProduct_id" => "5",
                  "fTotal_qty" => "200",
              ),
              Array
              (
                  "iProduct_id" => "6",
                  "fTotal_qty" => "200",
              ),
              Array
              (
                  "iProduct_id" => "1",
                  "fTotal_qty" => "300",
              )
      
      );
      
      $resultArray = array();
      foreach($array as $key => $value){
          if(array_key_exists($value['iProduct_id'], $resultArray)){
              $resultArray[$value['iProduct_id']]['total_qty'] = $resultArray[$value['iProduct_id']]['total_qty'] + $value['fTotal_qty'];
          }else {
              $resultArray[$value['iProduct_id']]['product_id'] = $value['iProduct_id'];
              $resultArray[$value['iProduct_id']]['total_qty'] = $value['fTotal_qty'];
          }
      }
      

      【讨论】:

        【解决方案5】:

        你可以用简单的for-loop来做到这一点

        $arr = array(array("id" => "1", "amount" => 200), array("id" => "2", "amount" => 400), array("id" => "1", "amount" => 100), array("id" => "2", "amount" => 600));
        
        $res = array();
        foreach($arr as $elem) {
            if (!isset($res[$elem["id"]])) //if this is the first time for this ID
                $res[$elem["id"]] = 0;
           $res[$elem["id"]] += $elem["amount"]; // add current amount
        }
        

        现在res 包含(键是product_id,值是total_qty):

        Array
        (
            [1] => 300
            [2] => 1000
        )
        

        【讨论】:

        • 非常感谢你救了我。这对我来说真的很好用,再次感谢@David Winder
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多