2

我有两个由 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 数组中的值用作键并将 values 数组中的值用作相应值来创建一个数组。

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

4

4 回答 4

4

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

$new = array();
foreach($questions AS $key => $value) {
    $new[$key] = $value . ", " . $comments[$key];
}
于 2013-03-28T15:42:45.313 回答
4

这应该为您提供几个选项。它假设 $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);
于 2013-03-28T15:43:27.650 回答
3

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

$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);
于 2013-03-28T16:01:53.460 回答
1

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

foreach($first_array as $index => $value){
    $output_array[$index] = $value . ", " . $second_array[$index];
}
于 2013-03-28T15:43:22.123 回答