Nina: array_merge verschluckt Index

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

  1. 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";

    1. 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

      1. function merge($arr1,$arr2)
        {
         foreach($arr1 as $id=>$value)
         {
          $arr2[$id]=$value;
         }
         return $arr2;
        }

      2. 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.