2013-03-28 3 views
1

У меня есть два индексных массивов, которые были созданы по 2 петли:Объединение двух индексированных массивов в PHP

$ вопросы

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, но, что:

Создает массив, используя значения из массива ключей в качестве ключей и значения из массива значений в качестве соответствующих значений.

Я уверен, что мне нужен третий цикл, чтобы «объединить» их, но как я могу это сделать?

+0

Гарантировано, что два массива будут иметь одинаковые ключи точно? –

+0

да, его созданный по форме комментарии и вопросы ключи жестко закодированы – Edward

+0

собирается открываться, поскольку bubba может быть на что-то! – Edward

ответ

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); 
+0

Вы положили тег bubba

+0

это потрясающе!но ключ вопросов и комментариев определяется как $ i. Я вижу, что вы определили $ key. в основном, где я могу поставить свой ключ $ i? после комментариев. например: $ comments [$ i] ?? ура! – Edward

+0

Получил. Принято! – Edward

3

Если вы знаете, что вы будете иметь те же ключи:

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

Savage. который работал как шарм. – Edward

0

Если массивы имеют одинаковые индексы решение может быть:

foreach($first_array as $index => $value){ 
    $output_array[$index] = $value . ", " . $second_array[$index]; 
} 
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); 
Смежные вопросы