我有一个带有一些索引的数组,我想得到公共元素。 的阵列
Array
(
[0] => Array
(
[0] => Array
(
[Code] => A
[Price] => 2333
[Item] => [Item_0_1]
)
[1] => Array
(
[Code] => C
[Price] => 2000
[Item] => [Item_0_2]
)
[2] => Array
(
[Code] => F
[Price] => 655
[Item] => [Item_0_3]
)
)
[1] => Array
(
[0] => Array
(
[Code] => C
[Price] => 7632
[Item] => [Item_1_1]
)
[1] => Array
(
[Code] => D
[Price] => 2334
[Item] => [Item_1_2]
)
)
)
所以我必须按照上面的数组做两个嵌套索引[0]
和[1]
,它可以更多。
所以我必须得到基于两个索引数组的代码的公共元素,因为你可以看到只有一个共同的元素是[Code] => C
,所以我必须从两个数组中得到这个元素但是常见的数组会像
[Code] => A // that will be same
[Price] => 9632 // [0]...[Price]+[1]...[Price]
[Item] => [item_0_3,item_1_2] // this will push in array
输出我想这样
Array
(
[0] => Array
(
[Code] => C
[Price] => 9632
[Item] => [item_0_3,item_1_2]
)
)
所以如何使用公共数组创建新数组我尝试了foreach, array merge
以及更多但是失败了我无法制作逻辑。
答案 0 :(得分:1)
您可以使用array_merge_recursive(),它看起来像这样:
$merged_array = array_merge_recursive($array1, $array2);
要获得类似的结果:
array(2) {
[0]=> array(1) {
[0]=> array(3) {
["Code"]=> string(1) "A"
["Price"]=> string(4) "2333"
["Item"]=> string(8) "Item_0_1"
}
}
[1]=> array(1) {
[0]=> array(3) {
["Code"]=> string(1) "A"
["Price"]=> string(6) "121212"
["Item"]=> string(8) "Item_0_3"
}
}
}
然后您可以正常循环遍历数组:
for($i = 0; $i <= count($merged_array) -1; $i++) {
echo ($merged_array[$i]['Code'] == "A") : $merged_array[$i]['Price'] . ' + ' : "";
}
// Output: 2333 + 121212
要使用您自己的代码执行此操作,请查看此SO answer。
答案 1 :(得分:0)
这将帮助您获得结果..
$array; //<----- Your input array
$code_array = array();
foreach($array as $key => $row) {
if($key == 0) {
$code_array = array_column($row,'Code');
} else {
$code_array = array_intersect($code_array, array_column($row,'Code'));
}
}
//You will get common element code in $code_array variable
$result_array = array();
foreach($code_array as $key => $code) {
$result_array[$key] = array(
'Code' => $code,
'Price' => 0,
'Item' => ''
);
}
// Created Result array with unique codes
foreach($array as $row) {
foreach($row as $sub_row) {
$key = array_search($sub_row['Code'],$code_array);
if($key) {
$result_array[$key]['Price'] += $sub_row['Price'];
$result_array[$key]['Item'] .= $result_array[$key]['Item'] == '' ? $sub_row['Item'] : ','.$sub_row['Item'];
}
}
}
//Assigned values to result array
答案 2 :(得分:0)
这是一个简单的方法:
function merge_duplicates(array $array) {
$newarr = [];
foreach ($array as $arr) {
foreach ($arr as $elem) {
if (!isset($newarr[$elem['Code']])) {
$newarr[$elem['Code']] = $elem;
$newarr[$elem['Code']]['Item'] = [$elem['Item']];
} else {
$newarr[$elem['Code']]['Price'] += $elem['Price'];
$newarr[$elem['Code']]['Item'] = array_merge($newarr[$elem['Code']]['Item'], [$elem['Item']]);
}
}
}
return array_values($newarr);
}
echo print_r(merge_duplicates($mi));
它返回整个项目列表,但是重复的项目将合并为一个,添加价格并列出项目名称或其他名称。