在php中合并两个索引数组

时间:2013-03-28 15:39:51

标签: php arrays loops

我有两个由2个循环创建的索引数组:

$问题

Array ( 
    [10] => Yes 
    [11] => No 
    [12] => Yes 
    [13] => No 
    [14] => Yes 
    [15] => No 
)

$评论

Array ( 
    [10] => comment 
    [11] => comment 
    [12] => comment 
    [13] => comment 
    [14] => comment 
    [15] => comment 
)

如何组合它们以便我得到以下结果并保留索引:

Array ( 
    [10] => Yes, comment 
    [11] => No, comment 
    [12] => Yes, comment 
    [13] => No, comment 
    [14] => Yes, comment 
    [15] => No, comment 
 )

查看array_merge,但如果密钥相同则会附加。

  

如果输入数组具有相同的字符串键,则后面的值   该密钥将覆盖前一个密钥。但是,如果是数组   包含数字键,后面的值不会覆盖原始值   值,但会附加。

看了一下array_combine但是:

  

使用keys数组中的值作为键来创建数组   值数组中的值作为相应的值。

我确定我需要第三个循环来“组合”它们,但我该怎么办呢?

4 个答案:

答案 0 :(得分:3)

如果您知道自己拥有完全相同的密钥:

$new = array();
foreach($questions AS $key => $value) {
    $new[$key] = $value . ", " . $comments[$key];
}

答案 1 :(得分:3)

这应该为您提供了几个选项。它做出了逻辑假设,即$ questions和$ comments之间的关键字是同步的,如果有一些奇怪的关键字,它们会处理。

<?php
$questions = array(
    '10' => 'Yes',
    '11' => 'No',
    '12' => 'Yes',
    '13' => 'No',
    '14' => 'Yes',
    '15' => 'No',
    '16' => 'No'
 );
$comments = array(
    '10' => 'comment 10',
    '11' => 'comment 11',
    '12' => 'comment 12',
    '13' => 'comment 13',
    '14' => 'comment 14',
    '15' => 'comment 15',
    '17' => 'comment 17'
 );

$combinedAsArray = array();
$combinedAsString = array();

foreach ($questions as $key => $value){

    if (array_key_exists($key, $comments)){
        $combinedAsArray[$key] = array($value, $comments[$key]);
        $combinedAsString[$key] = "$value, {$comments[$key]}";
    }else{
        $combinedAsArray[$key] = array($value, null);
        $combinedAsString[$key] = "$value, ";
    }
}

foreach ($comments as $key => $value){
    if (! array_key_exists($key, $questions)){
        $combinedAsArray[$key] = array(null, $value);
        $combinedAsString[$key] = " , $value";
    }
}

print_r($combinedAsArray);
print_r($combinedAsString);

答案 2 :(得分:2)

您可以像这样运行数组映射:

$merged_array = array_map(function($a, $b) {
    return $a . ', ' . $b;
}, $array1, $array2);

或者,如果您不想要连接字符串,而是想要

Array(
    0 => Array(
        0 => 'Yes',
        1 => 'comment 10',
    )
    ...
)

您可以将null传递给数组地图,如下所示:

$merged_array = array_map(null, $array1, $array2);

答案 3 :(得分:0)

如果数组具有相同的索引,则解决方案可以是:

foreach($first_array as $index => $value){
    $output_array[$index] = $value . ", " . $second_array[$index];
}