我有两个由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数组中的值作为键来创建数组 值数组中的值作为相应的值。
我确定我需要第三个循环来“组合”它们,但我该怎么办呢?
答案 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];
}