Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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 - Fatal编程技术网

值相同的php数组和键

值相同的php数组和键,php,Php,我有一个包含子数组的数组。我想对键相同的值求和,并将其放在一个列表中 这是我的阵列: $array = array( array(x1=> 1, x2 => 3, y5 => 9), array(x1=> 3, x4 => 1, y5 => 1), array(x1=> 1, x8 => 5, a5 => 2), array(x1=>

我有一个包含子数组的数组。我想对键相同的值求和,并将其放在一个列表中

这是我的阵列:

$array =  array( array(x1=> 1, x2 => 3, y5 => 9),
                 array(x1=> 3, x4 => 1, y5 => 1),
                 array(x1=> 1, x8 => 5, a5 => 2),
                 array(x1=> 2, x10 => 3)
                );
我想要一个数组,比如:

$newarray = array(x1=>7 , x2 => 3, x4=>1, x8=>5, x10=> 3, y5=>9, y5=>1, a5=>2));
有些人尝试:

            foreach($array as $key => $values)
        {


            foreach($values as $n_k => $n_v)
            {   

                    $newarray [$n_k] += $n_v;


            }
        }

这不是我的问题,但我发现这可以帮助你:

您必须创建一个新数组,然后为每个相等的keyid添加值。像这样的想法,我认为是可行的。 如果对你没有帮助,看看这篇文章,那也不是我的


这不是我的问题,但我发现这可以帮助你:

您必须创建一个新数组,然后为每个相等的keyid添加值。像这样的想法,我认为是可行的。 如果对你没有帮助,看看这篇文章,那也不是我的


问题是您正在添加一个值,即使它没有定义

您可以检查是否未按设置,并将值初始化为0

以下是完整的代码:

$array =  array( array('x1'=> 1, 'x2' => 3, 'y5' => 9), array('x1'=> 3, 'x4' => 1, 'y5' => 1), array('x1'=> 1, 'x8' => 5, 'a5' => 2), array('x1'=> 2, 'x10' => 3, 'b5' => 5));
$newarray = array();

foreach($array as $key => $values){
   foreach($values as $n_k => $n_v) {   
       if ( !isset($newarray[$n_k]) ) $newarray[$n_k] = 0;
       $newarray[$n_k] += $n_v;
   }
}
这将导致:

Array
(
    [x1] => 7
    [x2] => 3
    [y5] => 10
    [x4] => 1
    [x8] => 5
    [a5] => 2
    [x10] => 3
    [b5] => 5
)

问题是您正在添加一个值,即使它没有定义

您可以检查是否未按设置,并将值初始化为0

以下是完整的代码:

$array =  array( array('x1'=> 1, 'x2' => 3, 'y5' => 9), array('x1'=> 3, 'x4' => 1, 'y5' => 1), array('x1'=> 1, 'x8' => 5, 'a5' => 2), array('x1'=> 2, 'x10' => 3, 'b5' => 5));
$newarray = array();

foreach($array as $key => $values){
   foreach($values as $n_k => $n_v) {   
       if ( !isset($newarray[$n_k]) ) $newarray[$n_k] = 0;
       $newarray[$n_k] += $n_v;
   }
}
这将导致:

Array
(
    [x1] => 7
    [x2] => 3
    [y5] => 10
    [x4] => 1
    [x8] => 5
    [a5] => 2
    [x10] => 3
    [b5] => 5
)

您可以首先从数组中获取所有键,并在和中使用这些键来获得所需的输出。 如果阵列更大,这可能会带来更多好处

$array =  array( array("x1" => 1, "x2" => 3, "y5" => 9),
                 array("x1" => 3, "x4" => 1, "y5" => 1),
                 array("x1" => 1, "x8" => 5, "a5" => 2),
                 array("x1" => 2, "x10" => 3, "b5" => 5)
                );

$keys = [];
// get all keys used in $array
foreach($array as $subarr){
     $keys = array_merge($keys, array_keys($subarr));
}
// $keys is now: 
// array (0 => 'x1', 1 => 'x2', 2 => 'y5', 3 => 'x1', 4 => 'x4', 5 => 'y5', 6 => 'x1', 7 => 'x8', 8 => 'a5', 9 => 'x1', 10 => 'x10', 11 => 'b5')

// loop only unique keys and sum the values
foreach(array_unique($keys) as $item){
    $res[$item] = array_sum(array_column($array, $item));
}
var_dump($res);

您可以首先从数组中获取所有键,并在和中使用这些键来获得所需的输出。 如果阵列更大,这可能会带来更多好处

$array =  array( array("x1" => 1, "x2" => 3, "y5" => 9),
                 array("x1" => 3, "x4" => 1, "y5" => 1),
                 array("x1" => 1, "x8" => 5, "a5" => 2),
                 array("x1" => 2, "x10" => 3, "b5" => 5)
                );

$keys = [];
// get all keys used in $array
foreach($array as $subarr){
     $keys = array_merge($keys, array_keys($subarr));
}
// $keys is now: 
// array (0 => 'x1', 1 => 'x2', 2 => 'y5', 3 => 'x1', 4 => 'x4', 5 => 'y5', 6 => 'x1', 7 => 'x8', 8 => 'a5', 9 => 'x1', 10 => 'x10', 11 => 'b5')

// loop only unique keys and sum the values
foreach(array_unique($keys) as $item){
    $res[$item] = array_sum(array_column($array, $item));
}
var_dump($res);

查看您的数组是否无效。缺少或额外@pr1nc3我找到了解决方案我发现是issetSee的问题你的数组无效。有缺失或额外的@pr1nc3我找到了解决方案我这是issetthx的问题我有此代码,但我忘记了isset,因为某些键不在某些列表中。此代码会在每个新键上创建一个通知。一个会使代码运行变慢的通知。如果您可以在堆栈溢出时使用指向另一个答案的链接进行回答,请将该问题标记为重复。thx我有此代码,但我忘记了isset,因为某些键不在某些列表中。此代码会在每个新键上创建一个通知。将使代码运行变慢的通知。如果您可以在堆栈溢出时使用指向另一个答案的链接进行回答,请将该问题标记为重复问题。