Php 如何将数组与子元素合并
我有一个具有相同Php 如何将数组与子元素合并,php,Php,我有一个具有相同customerid的数组。我想将所有相同的customerid数组合并到一个数组中,只需对数组进行少量修改 Array ( [0] => Array ( [customerid] => 13 [customer_fullname] => Chris [profession_id] => 8 [profession_name] =>
customerid
的数组。我想将所有相同的customerid
数组合并到一个数组中,只需对数组进行少量修改
Array
(
[0] => Array
(
[customerid] => 13
[customer_fullname] => Chris
[profession_id] => 8
[profession_name] => Producer
)
[1] => Array
(
[customerid] => 1
[customer_fullname] => John
[profession_id] => 8
[profession_name] => Producer
)
[2] => Array
(
[customerid] => 13
[customer_fullname] => Chris
[profession_id] => 7
[profession_name] => Camera
)
)
现在我想创建一个新数组,如下所示:
Array(
[customerid] => 13
[customer_fullname] => Chris
[new_array] => array(
[0]=>[profession_id] => 8, [profession_name] => Producer,
[1]=>[profession_id] => 7, [profession_name] => Camera
)
)
花了一些时间在这上面,但没能把它弄好如果要合并很多记录,有更好的方法,但是如果您想找到一种方法,只需按照说明合并两个记录,我会这样做:
$array1 = array(
'customerid' => 13
'customer_fullname' => 'John',
'profession_id' => 8,
'profession_name' => 'Producer'
);
$array2 = array(
'customerid' => 13
'customer_fullname' => 'John',
'profession_id' => 7,
'profession_name' => 'Director'
);
function merge_customers($customerA, $customerB)
{
$newCustomer = array();
if ($customerA['customerid'] == $customerB['customerid'])
{
$newCustomer['customerid'] = $customerA['customerid'];
$newCustomer['customer_fullname'] = $customerA['customer_fullname'];
$newCustomer['new_array'] = array(
array(
'profession_id' => $customerA['profession_id'],
'profession_name' => $customerA['profession_name']
),
array(
'profession_id' => $customerB['profession_id'],
'profession_name' => $customerB['profession_name']
)
);
return $newCustomer;
}
/* We can't merge these if they're different customers. */
return NULL;
}
如果要合并很多记录,有更好的方法,但如果您想找到一种方法,只需按照说明合并两个记录,我会这样做:
$array1 = array(
'customerid' => 13
'customer_fullname' => 'John',
'profession_id' => 8,
'profession_name' => 'Producer'
);
$array2 = array(
'customerid' => 13
'customer_fullname' => 'John',
'profession_id' => 7,
'profession_name' => 'Director'
);
function merge_customers($customerA, $customerB)
{
$newCustomer = array();
if ($customerA['customerid'] == $customerB['customerid'])
{
$newCustomer['customerid'] = $customerA['customerid'];
$newCustomer['customer_fullname'] = $customerA['customer_fullname'];
$newCustomer['new_array'] = array(
array(
'profession_id' => $customerA['profession_id'],
'profession_name' => $customerA['profession_name']
),
array(
'profession_id' => $customerB['profession_id'],
'profession_name' => $customerB['profession_name']
)
);
return $newCustomer;
}
/* We can't merge these if they're different customers. */
return NULL;
}
快速破解,也许有更好的解决方案。 注意:第二个“for each”循环仅在数组可能没有相同字段时才需要
function merge($array1, $array2){
$result = array();
foreach($array1 as $key => $value){
if(isset($array2[$key]) && $array2[$key]!=$array1[$key]){
$result[$key][]=$value;
$result[$key][]=$array2[$key];
}else{
$result[$key]=$value;
}
}
foreach($array2 as $key => $value){
if(!isset($result[$key])){
$result[$key] = $value;
}
}
return $result;
}
print_r(merge($array1, $array2));
快速破解,也许有更好的解决方案。 注意:第二个“for each”循环仅在数组可能没有相同字段时才需要
function merge($array1, $array2){
$result = array();
foreach($array1 as $key => $value){
if(isset($array2[$key]) && $array2[$key]!=$array1[$key]){
$result[$key][]=$value;
$result[$key][]=$array2[$key];
}else{
$result[$key]=$value;
}
}
foreach($array2 as $key => $value){
if(!isset($result[$key])){
$result[$key] = $value;
}
}
return $result;
}
print_r(merge($array1, $array2));
该扩展解决方案也非常适合查找和“合并”具有相同
customerid的多组条目。使用的功能:array\u filter
,array\u count\u value
,array\u key
,array\u walk
,array\u chunk
和array\u value
:
// supposing $arr is your initial array
// finds which 'customerid' has multiple entries
$dupIds = array_filter(array_count_values(array_column($arr, "customerid")), function($v) {
return $v > 1;
});
$dupIds = array_keys($dupIds);
$result = [];
array_walk($arr, function($v) use(&$result, $dupIds) {
if (in_array($v['customerid'], $dupIds)) {
$parts = array_chunk($v, 2, true);
if (!isset($result[$v['customerid']])) {
$result[$v['customerid']] = $parts[0] + ['new_array' => [$parts[1]]];
} else {
$result[$v['customerid']]['new_array'][] = $parts[1];
}
}
});
print_r(array_values($result));
输出:
Array
(
[0] => Array
(
[customerid] => 13
[customer_fullname] => Chris
[new_array] => Array
(
[0] => Array
(
[profession_id] => 8
[profession_name] => Producer
)
[1] => Array
(
[profession_id] => 7
[profession_name] => Camera
)
)
)
)
该扩展解决方案也非常适合查找和“合并”具有相同customerid的多组条目。使用的功能:array\u filter
,array\u count\u value
,array\u key
,array\u walk
,array\u chunk
和array\u value
:
// supposing $arr is your initial array
// finds which 'customerid' has multiple entries
$dupIds = array_filter(array_count_values(array_column($arr, "customerid")), function($v) {
return $v > 1;
});
$dupIds = array_keys($dupIds);
$result = [];
array_walk($arr, function($v) use(&$result, $dupIds) {
if (in_array($v['customerid'], $dupIds)) {
$parts = array_chunk($v, 2, true);
if (!isset($result[$v['customerid']])) {
$result[$v['customerid']] = $parts[0] + ['new_array' => [$parts[1]]];
} else {
$result[$v['customerid']]['new_array'][] = $parts[1];
}
}
});
print_r(array_values($result));
输出:
Array
(
[0] => Array
(
[customerid] => 13
[customer_fullname] => Chris
[new_array] => Array
(
[0] => Array
(
[profession_id] => 8
[profession_name] => Producer
)
[1] => Array
(
[profession_id] => 7
[profession_name] => Camera
)
)
)
)
实际上是的……可能有多个阵列,而不仅仅是2个。有什么更好的方法吗?我会在几分钟内添加,当然。根据您的更新,我会按照@RomanPerekhrest建议的方式进行:)实际上是的……可能有多个数组,而不仅仅是2个。有什么更好的方法吗?我会在几分钟内添加它,当然。根据您的更新,我会按照@RomanPerekhrest建议的方式进行:)您想为第一个customerid omly还是为所有客户构建阵列?我正在合并所有具有相同customerid的阵列,所以在我们的例子中,有两个customerid具有相同的id,所以我们将其合并。那么[customerid]=>1是什么呢?我们忽略了这一点,因为它没有任何匹配的customerid。您是要为第一个customerid omly还是所有customerid构建阵列?我将合并所有具有相同customerid的阵列,在我们的例子中,有两个customerid具有相同的id,所以我们将其合并。那么[customerid]=>1是什么呢?我们忽略了这一点,因为它没有任何匹配的customerid…但是可能有n个相同的customerid…但是可能有n个相同的customerid