Hallo zusammen!
Hab eben eine Funktion gebraucht die 2 Arrays wie einen Reißverschluss zusammenfügt.
Da PHP da nichts brauchbares liefert hab ich was gebastelt.
Vielleicht kanns ja wer brauchen:)
Sicher nicht die sauberste Lösung, aber man bekommt was man will.
PHP
<?php
// Arrays im "Reißverschluss-Verfahren" zusammenführen
//
// Die Schlüssel beider Arrays bleiben erhalten und werden bei Gleichwertigkeit mit einem Postfix versehen
//
// Arrays unterschiedlicher Größe:
// - Das größere Array zuerst angeben, sonst wird es "abgeschnitten" sobald das Ende des Kleineren erreicht ist.
// - Wenn das Ende des Kleineren erreicht ist wird der Rest des Größeren der Reihe nach angefügt.
function array_zip($arr1, $arr2){
$newarr = array();
$postfix = 1;
$index1 = array_keys($arr1);
$index2 = array_keys($arr2);
$count2 = count($arr2);
foreach($index1 as $key => $value){
if(array_key_exists($value, $newarr)){
$newkey1 = $value.'_'.$postfix;
$postfix++;
}
else{
$newkey1 = $value;
}
$newarr[$newkey1] = $arr1[$value];
if($key < $count2){
if(array_key_exists($index2[$key], $newarr)){
$newkey2 = $index2[$key].'_'.$postfix;
$postfix++;
}
else{
$newkey2 = $index2[$key];
}
}
else{
$newkey2 = '';
}
if(!empty($newkey2)){
$newarr[$newkey2] = $arr2[$index2[$key]];
}
}
return $newarr;
}
$beispiel1 = array('a' => 'The', 'b' => 'brown', 'c' => 'jumps', 'd' => 'the', 'e' => 'dog', 'x' => 'Lorem', 'y' => 'ipsum');
$beispiel2 = array('a' => 'quick', 'b' => 'fox', 'c' => 'over', 'd' => 'lazy');
print_r(array_zip($beispiel1, $beispiel2));
/* Ergebnis:
Array
(
[a] => The
[f] => quick
[b] => brown
[a_1] => fox
[c] => jumps
[g] => over
[d] => the
[h] => lazy
[e] => dog
[x] => Lorem
[y] => ipsum
)
*/
?>
Alles anzeigen
Grüße, Kemos