array_merge verschluckt Index
Nina
- php
Hi,
wie halte ich array_merge davon ab, die Indexe zu entfernen.
Wenn ich z.B. $arr['text']='inhalt'; habe, bleibt der Index auch nach der Zusammenführung bestehen.
ABER wenn nun $arr['123']='inhalt'; (also eine Zahl als Index) verwendet wird, weißt array_merge diesem eine neue Zahl zu :(
Wie lässt sich das lösen?
Danke
echo $begrüßung;
wie halte ich array_merge davon ab, die Indexe zu entfernen.
Gar nicht, das ist das normale und dokumentierte Verhalten von array_merge().
Wie lässt sich das lösen?
Steht auch in der Dokumentation.
echo "$verabschiedung $name";
Habe nun der Dokumentation diese Funktion entnommen:
function merge($arr1,$arr2)
{
if(!is_array($arr1))
$arr1 = array();
if(!is_array($arr2))
$arr2 = array();
$keys1 = array_keys($arr1);
$keys2 = array_keys($arr2);
$keys = array_merge($keys1,$keys2);
$vals1 = array_values($arr1);
$vals2 = array_values($arr2);
$vals = array_merge($vals1,$vals2);
$ret = array();
foreach($keys as $key)
{
list($unused,$val) = each($vals);
$ret[$key] = $val;
}
return $ret;
}
Doch irgendwie scheint diese Funktion deutlich langsamer als array_merge zu arbeiten. Es lässt mir zwar die Index-Nummern bestehen, wie ich es benötige, aber dauert wesentlich länger.
für 1000 Items eines Arrays (1 dimensional):
array_merge => 2 sec
merge => 13 sec
Gibt es eine "optimierte" Version der Funktion, wobei eben die Indexe erhalten bleiben bei der Array-Zusammenführung? Oder wie könnte man die obige Funktion beschleunigen.
Leider hilft mir an diesem Punkt die Doku auch nicht weiter.
Gute Nacht
function merge($arr1,$arr2)
{
foreach($arr1 as $id=>$value)
{
$arr2[$id]=$value;
}
return $arr2;
}
Hi,
Habe nun der Dokumentation diese Funktion entnommen:
[...]
hmmm - diese hast du vielleicht den user comments entnommen, nicht der Dokumentation. Der Dokumentation, wie von dedlfix verlinkt, hättest du diesen Satz respektive Beispiel entnehmen können:
"If you want to completely preserve the arrays and just want to append them to each other, use the + operator:"
<?php
$array1 = array();
$array2 = array(1 => "data");
$result = $array1 + $array2;
?>
"The numeric key will be preserved and thus the association remains."
Array
(
[1] => data
)
siehe dazu auch die Dokumentation der Array Operators
Gibt es eine "optimierte" Version der Funktion, wobei eben die Indexe erhalten bleiben bei der Array-Zusammenführung?
$ php -r '$a = array("text" => "inhalt"); $b = array(123 => "inhalt"); var_dump($a + $b);'
array(2) {
["text"]=>
string(6) "inhalt"
[123]=>
string(6) "inhalt"
}
Leider hilft mir an diesem Punkt die Doku auch nicht weiter.
etwas mehr Konzentration bitte :-)
Gruß,
Andreas.