Ich habe zwei Arrays. Und ich möchte sie auf dem gleichen Schlüssel UND Wert zusammenführen. Wenn sie die gleichen ur_user_id
haben, werden sie zusammengeführt. array2
liefert nur einige zusätzliche Daten für array1
, also die new_array.length
= array1.length
. array1
erhält nur die zusätzlichen Daten von array2
.PHP verschmelzen zwei Arrays auf dem gleichen Schlüssel UND Wert
$array1 =
array(
array('ur_user_id'=> 1,'ur_fname'=>'PerA','ur_lname'=>'SonA'),
array('ur_user_id'=> 2,'ur_fname'=>'PerB','ur_lname'=>'SonB'),
array('ur_user_id'=> 3,'ur_fname'=>'PerC','ur_lname'=>'SonC'),
);
$array2 =
array(
array('ur_user_id' => 5,'ur_code' => 'EE','ur_user_role' => 'testE'),
array('ur_user_id' => 4,'ur_code' => 'DD','ur_user_role' => 'testD'),
array('ur_user_id' => 6,'ur_code' => 'FF','ur_user_role' => 'testF'),
array('ur_user_id' => 3,'ur_code' => 'CC','ur_user_role' => 'testC'),
array('ur_user_id' => 1,'ur_code' => 'AA','ur_user_role' => 'testA'),
array('ur_user_id' => 2,'ur_code' => 'BB','ur_user_role' => 'testB'),
);
Dann muss das neue Array so aussehen. Es hat beide Werte von array1
und array2
.
$new_array =
array(
array('ur_user_id'=> 1,'ur_fname'=>'PerA','ur_lname'=>'SonA','ur_code' => 'AA','ur_user_role' => 'testA'),
array('ur_user_id'=> 2,'ur_fname'=>'PerB','ur_lname'=>'SonB','ur_code' => 'BB','ur_user_role' => 'testB'),
array('ur_user_id'=> 3,'ur_fname'=>'PerC','ur_lname'=>'SonC','ur_code' => 'CC','ur_user_role' => 'testC'),
);
Die array1.length
ist immer kleiner oder gleich array2.length
nie größer. Und die Reihenfolge beider Arrays wird nicht immer geordnet. Ich habe die Funktion ausprobiert, die ich hier irgendwo gefunden habe, aber es funktioniert nicht für mich und ich bin nicht wirklich gut mit Loops.
function merge_common_keys(){
$arr = func_get_args();
$num = func_num_args();
$keys = array();
$i = 0;
for ($i=0; $i<$num; ++$i){
$keys = array_merge($keys, array_keys($arr[$i]));
}
$keys = array_unique($keys);
$merged = array();
foreach ($keys as $key){
$merged[$key] = array();
for($i=0; $i<$num; ++$i){
$merged[$key][] = isset($arr[$i][$key]) ? $arr[$i][$key] : null;
}
}
return $merged;
}
Basierend auf den angegebenen Arrays ist das Ergebnis wie folgt. Es verschmilzt nur mit demselben Schlüssel.
Array
(
[0] => Array
(
[0] => Array
(
[ur_user_id] => 1
[ur_fname] => PerA
[ur_lname] => SonA
)
[1] => Array
(
[ur_user_id] => 5
[ur_code] => AA-BB-CC
[ur_user_role] => testE
)
)
@NareshKumar, die auf demselben Schlüssel ist, nicht den Wert innerhalb der Taste. – iamdevlinph
Werfen Sie einen Blick auf meine Antwort und lassen Sie es mich wissen. –