我有一些关联数组,我需要根据那里键合并在一起。 这样:
array1:
[person1] => tony
[person2] => sandra
array2:
[person1] => london
[person2] => paris
需要:
array 3
[person1] => tony , london
[person2] => sandra , paris
我遇到的问题是密钥可能是任何值,因此可能是'person1'或者它可能是'hairyOtter'而且数组的大小是可变的。
答案 0 :(得分:3)
假设,每一个都不是多维的
$merged = array_merge_recursive($array1, $array2);
foreach ($merged as &$entry) {
if (is_array($entry)) {
$entry = implode(', ', $entry);
}
}
这个想法是,array_merge_recursive()
创建一个新数组,如果它找到两个具有相同键的值。其他一切都保持不变。
答案 1 :(得分:1)
我确信有更有效的方法可以实现这一目标,但就目前而言,这有效:
<?php
function combine( $keys, $first, $second ) {
$args = func_get_args( );
$keys = array_shift( $args );
$arrays = $args;
$result = array( );
foreach( $keys as $key ) {
foreach( $arrays as $array ) {
if( isset( $array[$key] ) ) {
$result[$key][] = $array[$key];
}
}
}
return $result;
}
$first = array(
'person1' => 'tony',
'person2' => 'sandra'
);
$second = array(
'person1' => 'london',
'person2' => 'paris'
);
/**
* To make sure you get *every* key out of both arrays.
*/
$keys = array_unique( array_merge( array_keys( $first ), array_keys( $second ) ) );
$combined = combine( $keys, $first, $second );
var_dump( $combined );
答案 2 :(得分:0)
两个循环应该这样做。迭代array1和array2中的每一个,在进入数组时初始化array3的键,并推入该数组。这是第一个循环
$array3 = array();
foreach (array_keys($array1) as $key) {
if(!array_key_exists($key, $array3)) {
$array3[$key] = array();
}
array_push($array3[$key], $array1[$key]);
}
答案 3 :(得分:0)
$array1 = array('a' => 1, 'b' => 2);
$array2 = array('a' => 3, 'b' => 4, 'c' => 5);
foreach ($array1 as $k => $v) {
$tArray[$k][] = $v;
}
foreach ($array2 as $k => $v) {
$tArray[$k][] = $v;
}
foreach ($tArray as $k => $v) {
$tArray[$k] = implode(',',$tArray[$k]);
}
答案 4 :(得分:0)
我会创建一个多维数组,除非有一个特定的原因你不能使用它。这样,您将拥有一个如下所示的数组:
Array
(
[Person1] => Array
(
[Name] => Tony
[City] => London
)
[Person2] => Array
(
[Name] => Sandra
[City] => Paris
)
)