problem bei der php-programmierung

  • hi @ all


    ich hab da mal ein kleines problem: ich möchte filme in einem verzeichniss nach dem erscheinungsjahr sortieren also der älteste zu erst.

    dazu lese ich das jahr aus dem dateinamen aus. damit habe ich versucht ein assoziatives array zu füllen und dann nach den jahrezahlen zu sortieren, was soweit auch geklappt hat aber wenn im verzeichnis 2 filme mit dem selben erscheinungsjahr gibt wird der erste eintrag überschrieben und so weiter.


    also ist die idee wenn das passiert den assiziativen schlüssel einfach um eins zu erhöhen und einen neuen eintrag in dem array damit zu erzeugen, aber jetzt sammelt das array alle film namen nach und nach ein und zeigt in jeden unterverzeichnis alle filme aus den vorherigen verzeichnissen mit an , aber es sortiert brav nach erscheinungs jahr.


    also vermute ich der fehler liegt in der ebene der schleifen, aber ich finde den fehler einfach nicht.

    der code ist kommentiert zum dokumentieren was passiert.


    ist ein auszug aus den quelltext. - so wie das sich jetzt verhält , wäre es gut für eine suchmaske um nach namen zu suchen, wenn alle namen in einem array sind.

    folgender quell code ist die basis von der ich ausgegangen bin, um nach jahreszahlen zu sortieren anstatt alphabetisch.


    Code
    // Dateien einlesen
      $verzeichnis1 = array_slice(scandir($verzeichnispfad1), 2);
      // alphabetisch sortieren
      sort($verzeichnis1);
      // ausgeben der Dateien
      foreach ($verzeichnis1 as $element1)

    danke für jede zielführende hilfe. :danke_ATDE:

    die wahrheit will keiner hören oder lesen.

  • Ich habe Probleme deine Sätze zu lesen. Wäre schön, wenn du vernünftig schreiben würdest. Die Regeln der Rechtschreubung sind im Internet nicht ausgesetzt.

    Zum Problem: Verpasse deinem Array einen zusätzlichen Schlüssel $ejahr[$jahr][] und nutze array_multisort(). Sortiere dann nur nach dem 1. Schlüssel.

  • Ich habe Probleme deine Sätze zu lesen. Wäre schön, wenn du vernünftig schreiben würdest. Die Regeln der Rechtschreubung sind im Internet nicht ausgesetzt.

    Zum Problem: Verpasse deinem Array einen zusätzlichen Schlüssel $ejahr[$jahr][] und nutze array_multisort(). Sortiere dann nur nach dem 1. Schlüssel.

    ich habs ausprobiert und es funktionieert nicht


    Code
    $ejahr[$jahr][] = $element1;
          }
        }
      // nach den assozierten Schlüsseln sortieren  
      //ksort($ejahr);
      array_multisort($ejahr[0], SORT_ASC, SORT_STRING);


    nun bekomme ic als anzeige nur ARRAY angezeigt, anstatt der dateinamen und das array sammelt immernoch.

    die wahrheit will keiner hören oder lesen.

  • Lass dir das Array mit print_r($ejahr) anzeigen, damit du dir die Struktur ansehen kannst. Du musst, um das als String zu bekommen einfach nur das Array nochmal mit foreach ausgeben. In dem Array befinden sich die Daten mit dem Index [0],[1] ...

  • Lass dir das Array mit print_r($ejahr) anzeigen, damit du dir die Struktur ansehen kannst. Du musst, um das als String zu bekommen einfach nur das Array nochmal mit foreach ausgeben. In dem Array befinden sich die Daten mit dem Index [0],[1] ...

    ich hab mit print_r($ejahr) ausgeben lassen als test

    Code
    $test = print_r($ejahr);
      echo "$test";

    als erbegnis kam raus das die jareszahlen richtig als keys benutzt werden, aber jede rahreszahl um eins erhöht wird.

    weiterhin sammelt das array nach und nach die filme aus allen verzeichnissen ein.

    es soll eigentlich nur in dem aktuellen verzeichnis alle dateien einlesen und nach jahreszahlen sortieren und dann den vorgang im nächsten wiederholen.

    ich hab das von dem hier versucht zu adaptieren.

    Code
    // ersten Buchstaben des Verzeichnisses auslesen und Großschreiben
      $buchstabe = mb_strtoupper(mb_substr($element, 0, 1));
      // Vergleich, ob die Anfangsbuchstaben ungleich sind
      if (!mb_strstr($buchstabe_alt,$buchstabe))
        {
        $buchstabe_alt .= $buchstabe;
        echo "<br>\n";
        echo "<strong id=\"$buchstabe\">$buchstabe</strong><br>\n";
        }

    aber es ist mir aufgefallen das dann bei gleichen jahreszahlen nur der letzte mit der jahreszahl angezeigt wird, deswegen die idee wenn zweimal oder mehr die selbe jahreszahl vorkommt - einfach um eins erhöhen, da ja ein key nicht 2mal vorkommen kann.

    und es anstelle der alphabetischen sortierung einzufügen

    Code
    // Dateien einlesen
      $verzeichnis1 = array_slice(scandir($verzeichnispfad1), 2);
      // alphabetisch sortieren
      sort($verzeichnis1);
      // ausgeben der Dateien
      foreach ($verzeichnis1 as $element1)
        {

    die wahrheit will keiner hören oder lesen.