проверка одного многомерного массива с другими значениями индекса php - PullRequest
0 голосов
/ 02 января 2019

Это мой массив, я хочу проверить одно значение индекса, чтобы остаться другим значением индекса, и если значение 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

Ответы [ 5 ]

0 голосов
/ 02 января 2019

Почему бы не использовать Функции сортировки PHP , которые выполняют работу по оптимизации сортировки.В 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));
0 голосов
/ 02 января 2019
<?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
0 голосов
/ 02 января 2019

Попробуйте это для полной информации

    <?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
0 голосов
/ 02 января 2019

С помощью приведенного ниже кода вы можете получить ожидаемый результат.

<?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'];
    }
}
0 голосов
/ 02 января 2019

Вы можете сделать это с помощью простого 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
)
...