PHP基于键将多个关联数组添加到新数组

时间:2011-05-12 14:11:43

标签: php arrays

我有一些关联数组,我需要根据那里键合并在一起。 这样:

array1:
 [person1] => tony 
 [person2] => sandra 

array2:
 [person1] => london
 [person2] => paris        

需要:

 array 3
  [person1] => tony , london
  [person2] => sandra , paris

我遇到的问题是密钥可能是任何值,因此可能是'person1'或者它可能是'hairyOtter'而且数组的大小是可变的。

5 个答案:

答案 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
  )
)