如何在php多维数组中匹配另一个键值时求和一个键值

如何在php多维数组中匹配另一个键值时求和一个键值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个多维数组,如下所示: array ( 0 => array("id" => 4, "price" => 1000), 1 => array("id" => 4, "price" => 500), 2 => array("id" => 5, "price" => 1000), 3 => array("id" => 5, "price" => 1000), 4 => ar

我有一个多维数组,如下所示:

array
(
    0 => array("id" => 4, "price" => 1000), 
    1 => array("id" => 4, "price" => 500), 
    2 => array("id" => 5, "price" => 1000),
    3 => array("id" => 5, "price" => 1000),
    4 => array("id" => 4, "price" => 0),
    5 => array("id" => 5, "price" => 0)
)
并希望得到如下所示的结果数组:

array
(
    0 => array("id" => 4, "price" => 1500), 
    1 => array("id" => 5, "price" => 2000),
)
其中price是匹配id的和,例如,
id
=4 price将是结果数组中(1000+500+0)的和

如何在PHP中获得结果数组

我编辑答案以添加一行,删除错误通知

使用foreach循环并使用加法

$arr = array
(
    0 => array("id" => 4, "price" => 1000), 
    1 => array("id" => 4, "price" => 500), 
    2 => array("id" => 5, "price" => 1000),
    3 => array("id" => 5, "price" => 1000),
    4 => array("id" => 4, "price" => 0),
    5 => array("id" => 5, "price" => 0)
);

$result = array();
foreach($arr as $val){
    if(!isset($result[$val["id"]])) $result[$val["id"]] =0;
    $result[$val["id"]] += $val["price"];
}

var_dump($result);

我编辑答案以添加一行,删除错误通知

使用foreach循环并使用加法

$arr = array
(
    0 => array("id" => 4, "price" => 1000), 
    1 => array("id" => 4, "price" => 500), 
    2 => array("id" => 5, "price" => 1000),
    3 => array("id" => 5, "price" => 1000),
    4 => array("id" => 4, "price" => 0),
    5 => array("id" => 5, "price" => 0)
);

$result = array();
foreach($arr as $val){
    if(!isset($result[$val["id"]])) $result[$val["id"]] =0;
    $result[$val["id"]] += $val["price"];
}

var_dump($result);

使用简单的
foreach

$arr = array
    (
    0 => array("id" => 4, "price" => 1000),
    1 => array("id" => 4, "price" => 500),
    2 => array("id" => 5, "price" => 1000),
    3 => array("id" => 5, "price" => 1000),
    4 => array("id" => 4, "price" => 0),
    5 => array("id" => 5, "price" => 0)
);

$sum = [];
foreach ($arr as $value) {
    extract($value);
    $sum[$id]['id'] = $id;
    if (array_key_exists($id, $sum)) {
        $sum[$id]['price'] = $price;
    } else {
        $sum[$id]['price'] += $price;
    }
}

print_r(array_values($sum));

使用简单的
foreach

$arr = array
    (
    0 => array("id" => 4, "price" => 1000),
    1 => array("id" => 4, "price" => 500),
    2 => array("id" => 5, "price" => 1000),
    3 => array("id" => 5, "price" => 1000),
    4 => array("id" => 4, "price" => 0),
    5 => array("id" => 5, "price" => 0)
);

$sum = [];
foreach ($arr as $value) {
    extract($value);
    $sum[$id]['id'] = $id;
    if (array_key_exists($id, $sum)) {
        $sum[$id]['price'] = $price;
    } else {
        $sum[$id]['price'] += $price;
    }
}

print_r(array_values($sum));

使用以下方法:

$aggregated = [];

foreach ($rows as $row) {
    $id = $row['id'];
    $price = $row['price'];

    if (!array_key_exists($id, $aggregated)) {
        $aggregated[$id] = [
           'id' => $id,
           'price' => $price,
        ];

        continue;
    }

    $aggregated[$id]['price'] += $price;
}

$result = array_values($aggregated);
有关参考,请参阅:

有关示例,请参见:

使用以下方法:

$aggregated = [];

foreach ($rows as $row) {
    $id = $row['id'];
    $price = $row['price'];

    if (!array_key_exists($id, $aggregated)) {
        $aggregated[$id] = [
           'id' => $id,
           'price' => $price,
        ];

        continue;
    }

    $aggregated[$id]['price'] += $price;
}

$result = array_values($aggregated);
有关参考,请参阅:

有关示例,请参见:


有一个环吗?您尝试过什么?使用
foreach
-循环和
if
-语句?我尝试过,但没有得到预期的结果。使用循环?您尝试过什么?使用
foreach
-循环和
if
-语句?我尝试过,但没有得到预期的结果。正如所要求的那样,这缺少标识符。@localheinz不是真的。$result的键是ID。否,结果的结构与所需的结构不匹配。如上所述。@localheinz这是一个紧凑的数组,我想我们应该让OP说它是否可以。所以你现在可以删除你的否决票。或者,你可以提供一个符合OP要求的答案,答案就在问题的主体中。遗憾的是,您的答案没有提供。这缺少了所要求的标识符。@localheinz实际上没有。$result的键是ID。否,结果的结构与所需的结构不匹配。如上所述。@localheinz这是一个紧凑的数组,我想我们应该让OP说它是否可以。所以你现在可以删除你的否决票。或者,你可以提供一个符合OP要求的答案,答案就在问题的主体中。遗憾的是,你的回答没有提供答案。