String/Integer bei einem array_merge

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • String/Integer bei einem array_merge

    Hallo Forum,
    ich habe ein problem mit der Zusammenführung zweier Arrays.
    Es sind beides Hashtables die aus einem Verzeichnispfad erstellten werden
    d.h. der letzte ordner wird als key verwendet und diesem als value der
    komplette pfad zugewiesen. Hier ein Beispiel:

    /var/opt/data/www/docs/ordner1/unterordner1/ [unterordner1]
    /var/opt/data/www/docs/ordner1/unterordner2/ [unterordner2]
    usw...

    Wenn ich mir die Arrays mit print_r ausgeben lassen, ist die Zuweisung
    auch immer exakt wie gewünscht. Auch wenn der Ordnername eine Zahl
    ist, z.B. 2005
    /var/opt/data/www/docs/ordner1/ordner3/ordner7/2005/ [2005]

    Danach werden die beiden Arrays zu einem kompletten gemerget.
    Nach der Zusammenführung wandelt php aber die Zahlen (zuvor ja in String Form)
    in einen Integer um und beginnt bei 0 bis xx. Das sieht dann etwa so aus:
    /var/opt/data/www/docs/ordner1/unterordner1/ [unterordner1]
    /var/opt/data/www/docs/ordner1/unterordner2/ [unterordner2]
    /var/opt/data/www/docs/ordner1/ordner3/ordner7/2005/ [0]
    /var/opt/data/www/docs/ordner5/ordner11/ordner2/2004/ [1]
    usw.

    Wie kann ich nun verhindern dass diese Ordnernamen als Integer interpretiert werden.
    Habe es schon mit casten bei der ursprünglichen Arrayerstelltung versucht - leider ohne Erfolg.
    Hat jemand eine Idee.

    Hier noch ein Kurzer Ausschnitt aus dem Quellcode (stark verkürzt)
    PHP-Code:
    if (!isset($dir)) $dir '.';
    //$path = "/data/www/pvk/docs";
    $path realpath("$dir");

    if (
    is_file($path)) {
        (string)
    $dir dirname($path);
        
    $filename $path;
    }
    else {
        
    $dir $path;
        
    $filename "";
    }

    $handle=@opendir($dir);
    if(!
    $handle) {
        echo 
    "Das Verzeichnis existiert nicht.<br>";
    }
    if (
    $handle && empty($filename)) {
        
    $aktverzstr_replace ($WEBTREE,"",$dir);
        
    $files = array();
        
    $dirs = array();
        while (
    false !== ($file readdir ($handle))) {
            
    $realfile realpath("$dir/$file");
            if( 
    is_dir($realfile) ) {
                
    $dirs[(string)$file]=$realfile;
            }
            elseif (
    is_file($realfile)) {
                  
    $files[(string)$file]=$realfile;  // Dateien hier nicht lesen
            
    }
        }
        
    closedir($handle);
        
    ksort ($dirs);
        
    ksort ($files);
    $dats array_merge ($dirs$files); 

  • #2
    Wie kann ich nun verhindern dass diese Ordnernamen als Integer interpretiert werden.
    Gar nicht, solange du array_merge() verwendest. Schreib dir eine Funktion dafür!

    Kommentar


    • #3
      PHP-Code:
      $dats $files $dirs
      ?
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Original geschrieben von onemorenerd
        Gar nicht, solange du array_merge() verwendest. Schreib dir eine Funktion dafür!
        Haste vielleicht nen Tipp worauf genau ich dann in der Funktion achten müsste?


        Original geschrieben von mrhappiness
        PHP-Code:
        $dats $files $dirs
        ?
        Das geht leider nicht, da er mir dann die doppelten Einträge nicht entfernt

        Danke und Gruß
        Tolwin

        Kommentar


        • #5
          Original geschrieben von tolwin
          Haste vielleicht nen Tipp worauf genau ich dann in der Funktion achten müsste?
          Darauf, dass sie das gleiche macht wie array_merge() außer eben die "numerischen Strings" gerade nicht als Int sondern String zu behandeln. Wahrscheinlich findest du auf http://php.net/array_merge schon was fertiges oder wenigstens etwas in der Richtung.

          Kommentar

          Lädt...
          X