Como em PHP adicionar valores de uma matriz a outra quando seus pares de valores-chave coincidem?

Aqui estão meus dois arrays:

$array1 =( [0] => Array ( [row_id] => 237 [comment] => 'hello0' ) [1] => Array ( [row_id] => 5 [comment] => 'hello1' ) [2] => Array ( [row_id] => 6 [comment] => 'hello2' ) ); $array2= ( [0] => Array ( [row_id] => 5 [vote] => 1 ) [1] => Array ( [row_id] => 7 [vote] => 1 ) [2] => Array ( [row_id] => 237 [vote] => 0 ) ); 

Eu gostaria de combinar $array1 e $array2 em [row_id] e adicionar $array2 ‘s [vote] chave / valor pares para $ array1 onde $array1[row_id]=$array2[row_id]

É assim que eu gostaria que a saída fosse:

 $array1 =( [0] => Array ( [row_id] => 237 [comment] => 'hello0' [vote] => 0 ) [1] => Array ( [row_id] => 5 [comment] => 'hello1' [vote] => 1 ) [2] => Array ( [row_id] => 6 [comment] => 'hello2' [vote] => 1 ) ); 

Tenho certeza de que há muitas maneiras de fazer isso, então os pensamentos sobre a computação mais rápida também serão apreciados!

 foreach($array1 as $key1=>$value1) { foreach($array2 as $key2=>$value2) { if($value1['row_id']==$value2['row_id']) { $value1['vote'] = $value2['vote']; $result[$key1][]=$value1; } } } $result is what you need! 
 foreach($array1 as $key1=>$value1) { foreach($array2 as $key2=>$value2) { if($value1['row_id']==$value2['row_id']) { if ($value2['vote']) { $result[$key1]['vote']=$value2['vote']; // You're assigning the vote value to a new index of 'vote' on the original array. } else { $result[$key1]['vote'] = 'no vote'; } } } } 

Esta é a mudança que é necessária na resposta de Ray Cheng.

EDIT’d

EDITOU novamente:

Ao puxar dados de um database, você pode definitivamente obter os registros como uma matriz (procure-o, é tão antigo quanto os montes, o código está lá fora). O próximo passo é reorganizar a matriz no formato preferido. FOREACH é ideal para isso.

 // $array1 brought in from some other process $arrayStorage = array(); foreach ($array1 as $row){ $arrayStorage[$row['row_id']] = array('votes'=>$row['votes'], 'comment'=>$row['comment']); } 

Quando quiser colocá-lo de volta no database, inverter, certificando-se de puxar as chaves novamente.

 foreach ($arrayStorage as $row_id=>$row_data){ ... 

EDITAR O ÚLTIMO:

Supondo que ambos os respectivos bancos de dados tenham sido puxados para dados no formato do OP …

 foreach ($array1 as $row){ $arrayStorage[$row['row_id']]['comment'] = $row['comment']; } foreach ($array2 as $row){ $arrayStorage[$row['row_id']]['votes'] = $row['votes']; } $array1 = $arrayStorage; // You are going through $array1 and $array2 and creating a placeholder that is built with the $row_id as an associated structure with a comment and vote for each $row_id. This is your final desired array.