Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-如何使用重复的元素值对数组元素求和_Php_Arrays_Multidimensional Array_Duplicates - Fatal编程技术网

PHP-如何使用重复的元素值对数组元素求和

PHP-如何使用重复的元素值对数组元素求和,php,arrays,multidimensional-array,duplicates,Php,Arrays,Multidimensional Array,Duplicates,我有一个多数组,它有一些名称相同的重复值(名称是一个元素) 我想对具有相同名称的每个数组的数量求和,然后取消设置第二个数组 示例: <?php $Array=array( 0=>array("name"=>"X","QTY"=>500), 1=>array("name"=>"y","QTY"=>250), 2=>array("name"=>"X","QTY"=>250) ); ?> <?php $Ar

我有一个多数组,它有一些名称相同的重复值(名称是一个元素)
我想对具有相同名称的每个数组的数量求和,然后取消设置第二个数组
示例:

<?php 
 $Array=array(
  0=>array("name"=>"X","QTY"=>500),
  1=>array("name"=>"y","QTY"=>250),
  2=>array("name"=>"X","QTY"=>250)
 );
?>
<?php 
 $Array=array(
  0=>array("name"=>"X","QTY"=>750),
  1=>array("name"=>"y","QTY"=>250)
 );
?>


现在,我想对重复的值求和,如下所示。
结果:

<?php 
 $Array=array(
  0=>array("name"=>"X","QTY"=>500),
  1=>array("name"=>"y","QTY"=>250),
  2=>array("name"=>"X","QTY"=>250)
 );
?>
<?php 
 $Array=array(
  0=>array("name"=>"X","QTY"=>750),
  1=>array("name"=>"y","QTY"=>250)
 );
?>

更新
我发现这个函数在数组中搜索,foreach和其他循环也不起作用

<?php
function search($array, $key, $value)
{
    $results = array();

    if (is_array($array)) {
        if (isset($array[$key]) && $array[$key] == $value) {
            $results[] = $array;
        }

        foreach ($array as $subarray) {
            $results = array_merge($results, search($subarray, $key, $value));
        }
    }

    return $results;
}
?>

试试这个最简单的,希望对你有所帮助


通过创建一个以
name
为键的数组,然后迭代所有值并将它们相加,可以实现这一点

function sum_same($array) {

    $keyArray = [];

    foreach ($array as $entry) {
        $name = $entry["name"];
        if(isset($keyArray[$name])) {
            $keyArray[$name] += $entry["QTY"];
        } else {
            $keyArray[$name] = $entry["QTY"];
        }
    }

    // Convert the keyArray to the old format.
    $resultArray = [];
    foreach ($keyArray as $key => $value) {
        $resultArray[] = ["name" => $key, "QTY" => $value];
    }

    return $resultArray;
}


如果要更改旧阵列,请使用以下函数:

$myArray = sum_same($myArray);

旧数组将被新数组覆盖。

尝试此操作,检查

<?php

$Array=array(
0=>array("name"=>"X","QTY"=>500),
1=>array("name"=>"y","QTY"=>250),
2=>array("name"=>"X","QTY"=>250)
);
$keys = array_column($Array, 'name');
$QTYs = array_column($Array, 'QTY');
$result = [];
foreach($keys as $k => $v)
{
  $result[$v] += $QTYs[$k];
}
print_r($result);

此问题是一个典型的使用示例:


是您正在寻找的PHP函数。您是否尝试了
foreach()
?@RST更新,foreach没有帮助。您是添加了该函数还是实际使用了它?我使用了它。我正在使用codeigniter框架,一切正常,使用此函数我可以找到重复的值,主要部分是求和值并删除另一个数组。我可以工作,但有一个问题,我没有删除旧数组。@Nimahabibkhoda我更新了我的答案。如果这是你想要的,那么接受我的回答,如果不是,请进一步阐述你所说的删除是什么意思,以及你想通过这样做实现什么。这对我没有帮助
<?php

$Array=array(
0=>array("name"=>"X","QTY"=>500),
1=>array("name"=>"y","QTY"=>250),
2=>array("name"=>"X","QTY"=>250)
);

$result = array();

$names = array_column($Array, 'name');
$QTYs  = array_column($Array, 'QTY');

$unique_names = array_unique($names);

foreach ($unique_names as $name){
    $this_keys = array_keys($names, $name);
    $qty = array_sum(array_intersect_key($QTYs, array_combine($this_keys, $this_keys)));
    $result[] = array("name"=>$name,"QTY"=>$qty);
}
array (
  0 => 
  array (
    'name' => 'X',
    'QTY' => 750,
  ),
  1 => 
  array (
    'name' => 'y',
    'QTY' => 250,
  ),
)