PHP基于密钥将多个关联数组添加到新数组中
我有几个关联数组,我需要根据那些关键将它们合并到一起。 这样:PHP基于密钥将多个关联数组添加到新数组中
array1:
[person1] => tony
[person2] => sandra
array2:
[person1] => london
[person2] => paris
需求是:
array 3
[person1] => tony , london
[person2] => sandra , paris
我有但问题是,键可以是任意值,所以它可能是“PERSON1”也可以是“hairyOtter '而阵列的大小是可变的。
假设,每一个不多维
$merged = array_merge_recursive($array1, $array2);
foreach ($merged as &$entry) {
if (is_array($entry)) {
$entry = implode(', ', $entry);
}
}
的想法是,array_merge_recursive()
创建新的数组,如果找到相同的密钥两个值。其他一切都保持不变。
比我笨拙的解决方案更好:) – 2011-05-12 14:21:28
array_merge_recursive救援! – BobFlemming 2011-05-12 14:39:08
两个循环应该这样做。迭代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]);
}
如果$ array2中有一个不在array1中的键,则不适用。用你的解决方案,这将被忽略。 – 2011-05-12 14:22:27
你错了。我的解决方案完全忽略了$ array2,但是如果您复制并粘贴整个'foreach',将'array1'替换为'array2',键仍然会进入 - 它仍然是一个联合。 – jmtd 2011-05-12 14:24:09
我敢肯定有更有效的方式来做到这一点,但现在,这个工程:
<?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);
$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]);
}
我会创建一个多维数组,而不是,除非有特定的原因你不能使用一个。通过这种方式,您将拥有一个如下所示的数组:
Array
(
[Person1] => Array
(
[Name] => Tony
[City] => London
)
[Person2] => Array
(
[Name] => Sandra
[City] => Paris
)
)
不清楚您希望array3中的值是字符串还是另一个数组。 – jmtd 2011-05-12 14:17:38
另一个阵列。谢谢。 – BobFlemming 2011-05-12 14:22:05