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

如何在PHP中合并具有相同键和不同值的数组?

如何在PHP中合并具有相同键和不同值的数组?,php,arrays,merge,Php,Arrays,Merge,我有类似于以下内容的数组: 0 => Array ( [0] => Finance / Shopping / Food, [1] => 47 ) 1 => Array ( [0] => Finance / Shopping / Food, [1] => 25 ) 2 => Array ( [0] => Finance / Shopping / Electronic, [1] => 19

我有类似于以下内容的数组:

0 => Array ( [0] => Finance / Shopping / Food, [1] => 47 )            
1 => Array ( [0] => Finance / Shopping / Food, [1] => 25 )                 
2 => Array ( [0] => Finance / Shopping / Electronic, [1] => 190 ) 
我需要创建一个数组,其中[0]作为键,[1]作为值。
棘手的是,如果[0]是相同的,它会将[1]添加到现有值中

所以我想要的结果是:

array ([Finance / Shopping / Food]=> 72, [Finance / Shopping / Electronic] => 190);
谢谢

这应该可以:

$outArray = array()
foreach($superArray as $subArray) {
  if(array_key_exists($outArray,$subArray[0])) { 
    $outArray[$subArray[0]] += $subArray[1]; 
  } else { 
    $outArray[$subArray[0]] = $subArray[1]; 
  }
}

我不知道这个阵列有多大,也不知道性能是什么因素。但这是非常具体的,我敢推荐简单直接的程序方法:

<?
$result = array();
foreach($arr as $a) {
   $result[$a[0]] += $result[$a[1]];
}
?>

这将生成一些php警告,因为该字段尚未设置,所以您可能需要执行一些操作,如检查键是否存在,如果不存在,则设置值,如果存在,则添加值

编辑:好吧,让我们发布这个,这个可能看起来像

<?
$result = array();
foreach($arr as $a) {
   if(isset($result[$a[0]])) {
       $result[$a[0]] += $result[$a[1]];
   } else {
       $result[$a[0]] = $result[$a[1]];
   }
}
?>

这就是您要找的吗?

您可以使用“+”操作数

$arr1 = array(
  'key' => '1',
);
$arr2 = array(
  'key' => '2',
);
die(var_dump($arr2 + $arr1));

RESULT:
array
  'key' => string '2' (length=1)

事实上,如果没有if/else,它可能会工作,只需使用
$outArray[$subArray[0]]+=$subArray[1]
循环整个过程即可。它会工作,但对未初始化的值执行+=不是一个好主意(尽管我认为在这种情况下,假设0是“基本”值,这很简单。)@Brad我的想法正是如此。我的答案更正确,但是PHP非常灵活/肮脏,允许注释中的代码:-)看起来应该使用键/值对,而不是两个数组元素,一个是键,另一个是值。有没有什么原因让你不能像这样一开始就构建阵列?数组('Finance/Shopping/Food'=>47,'Finance/Shopping/Food'=>25,'Finance/Shopping/Electronic'=>190)这将使您尝试执行的其余操作更加简单。我甚至不能完全确定您的语法是否按原样工作。数组键可以是字符串,也可以是数值,但您的数组键似乎是常数,它们彼此相除,还有其他奇怪的东西。您可能希望在此处了解php数组:
array(4) {
  ["foo"]=>
  int(25)
  ["bar"]=>
  int(40)
  ["foobar"]=>
  int(15)
  ["foohbah"]=>
  int(25)
} 
$arr1 = array(
  'key' => '1',
);
$arr2 = array(
  'key' => '2',
);
die(var_dump($arr2 + $arr1));

RESULT:
array
  'key' => string '2' (length=1)