PHP array_multisort laeuft nicht

  • Ich habe eine kleine Datei mit meheren Zeilen erstellt. Die Zeilen enthalten einige Felder( Datum Name Betrag etc.) die ich mit file()
    einlese und list u. explode zerlege. ich kann auch die Felder in eine Tabelle stellen. Die Felder werden richtig ausgegeben.
    In der Kopfzeile sind Pfeile fuer die Sortierung (Up und Down). Der Click auf eine Pfeil funktioniert , ich uebergebe fuer die Sortierung den richtigen Code Der Link zu Switch ($__GET ['Sortierung']) und case ist auch OK.
    Aber jetzt kommts
    switch ( $_GET['sortierung'] ) {
    case ( "d" :(
    array_multisort($Datum, SORT_ASC, $Name, SORT_ASC, $records); ---------Ich bekomme den Fehler:
    Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\xxxxx\zzzzz\Name_out.php on line 28
    -----------------------------------------------------------------------------------
    meine Code gekeurzt:
    $array = file("$DOCUMENT_ROOT/../htdocs/Daten/Name_xyz.txt");
    list($Datum, $Name, $Betrag, $Bemerkung, $Kz) = explode("\n" , $records);
    foreach ($records as $nr => $inhalt) {


    $Datum[$nr] = ($inhalt[Datum]);
    $Name[$nr] = ($inhalt[Name]);
    $Betrag[$nr] = ($inhalt[Betrag]);
    $Bemerkung[$nr] = ($inhalt[Bemerkung]);
    $Kz[$nr] = ($inhalt[Kz]);
    ---------------------------------------------------------------------------------
    hier noch ein Beispiel meiner Zeilen:
    20090612|Meyer Vivi|130|B.Ueberweisung|y


    Kopfzeile der Tab.:
    Datum ↓ ↑ Name↓ ↑ Betrag↓ ↑ Bemerkung Kz


    Wie muss man die Zeile zerlegen damit ein array_multisort funktioniert?
    Fuer die Hilfe (Anfaenger gerecht) schon mal Danke.


    Uebrigens, dies ist eine abgewandelte Version von Terminkalender.php
    aus php-kurs.com von A.P.

  • Hallo WEB-Fans,


    Eure Unterstützung war gleich Null. Aber das ist gut so. Jetzt habe ich mir selber geholfen. Und war gezwungen mich in das Thema einzuarbeiten. Ich verstehe jetzt das Thema Arrays auch besser.
    Das Script vom 18.6.2009 ist voller Fehler und hinterlies den Eindruck, der hat ja wohl gar nichts verstanden.
    Hier ist aber ist die Lösung: Eine Text-Datei einlesen und sortiert nach Spalten ausgeben. Die Tabelle bietet auch die Möglichkeit mehrer Spalten durch Ancliken (Pfeil up u. down) nach Ausgabe erneut zu sortieren. Array-multisort ist wohl ein heikles Thema für viele. Habe nichts Vergleichbares gefunden. Ein Teil stammt aus: <!-- w --><a class="postlink" href="http://www.php-kurs.com">http://www.php-kurs.com</a><!-- w -->.
    Hier jetzt erst der Input /Output und danach mein Script.
    Ich will versuchen ein Screen-shot als Anhang zur Verfügung zustellen.
    Aber wie lädt man hier den Anhang? Und wo ist die Hilfe? Anhang geht offenbar nicht - sorry.
    Mein Dank an Axel. Dank seines PHP-Toturials bin ich im Rating vom Alzheimer-Ast etwas höher bewertet worden oder?


    Farmer u. Rentner in Afrika


    Huberg


    <?php // Version Name_627.php
    $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
    echo "name_xyz.txt Daten Stand 27.6.2009";
    $array = file("$DOCUMENT_ROOT/../htdocs/Daten/name_xyz.txt");
    $anzahl_zeilen = count($array);
    echo "<br/>"; echo "<br/>";
    echo 'array vor der Sortierung und vor der Trennung mit explode' ;
    echo "<pre>";
    print_r ($array); // nur fuer Test


    echo "array in 5 Spalten (arrays) zerlegt " ;
    echo "<br/>"; echo "<br/>";
    for ($i = 0; $i < $anzahl_zeilen ; $i++)
    {
    // Zeilen in Spalten speichern -----------------------------
    $line = explode ("|" , $array[$i]) ;
    $datum[$i] = strtolower ($line[0] );
    $name[$i] = strtolower ($line[1]);
    $betrag[$i] = strtolower ($line[2]);
    $bemerkung[$i]= strtolower ($line[3]);
    $kz[$i] = strtolower ($line[4]);
    print_r ($datum[$i]); // nur fuer Test
    print_r ($name[$i] );
    print_r ($betrag[$i] );
    print_r ($bemerkung[$i] );
    print_r ($kz[$i] );
    }
    switch ( $_GET['sortierung'] )
    {
    case ( "d" :(
    array_multisort($datum, SORT_ASC, $name, SORT_ASC,$betrag, SORT_ASC, $bemerkung, SORT_ASC );
    echo "nach switch/case d"; // nur fuer Test
    break;
    case ( "da" :(
    array_multisort($datum, SORT_DESC, $name, SORT_DESC, $betrag, SORT_DESC, $bemerkung, SORT_ASC );
    echo "nach switch/case da"; // nur fuer Test
    break;
    case ( "b" :(
    array_multisort( $name, SORT_ASC, $datum, SORT_ASC, $betrag,SORT_ASC,$bemerkung, SORT_ASC );
    echo "nach switch/case b"; // nur fuer Test
    break;
    case ( "ba" :(
    array_multisort( $name, SORT_DESC,$datum, SORT_DESC,$betrag, SORT_DESC,$bemerkung, SORT_DESC );
    echo "nach switch/case ba"; // nur fuer Test
    break;
    case ("o"):
    array_multisort( $betrag, SORT_ASC,$name, SORT_ASC,$datum, SORT_ASC,$bemerkung, SORT_ASC);
    echo "nach switch/case o = Betrag aufsteigend"; // nur fuer Test
    break;
    case ("oa"):
    array_multisort( $betrag, SORT_DESC,$name, SORT_DESC,$datum, SORT_DESC,$bemerkung, SORT_DESC);
    echo "nach switch/case oa = Betrag absteigend"; // nur fuer Test
    break;
    DEFAULT:
    array_multisort($datum, SORT_ASC, $name, SORT_ASC,$betrag, SORT_ASC, $bemerkung, SORT_ASC );
    }
    ausgabe_tabelle ( $datum, $name, $betrag, $bemerkung, $kz, $anzahl_zeilen);
    // ------------------------------------------------------------------
    function ausgabe_tabelle ( $datum, $name, $betrag, $bemerkung, $kz, $anzahl_zeilen)
    {
    echo '<table border="1" cellpadding="6" cellspacing="0">';
    echo '<tr bgcolor="#6CF8E6">';
    echo '<th>';
    echo 'Datum ';
    echo '<a href="Name_627.php?sortierung=d">&darr;</a>';
    echo ' ';
    echo '<a href="Name_627.php?sortierung=da">&uarr;</a>';
    echo '</th>';
    echo '<th>';
    echo 'Name ';
    echo '<a href="Name_627.php?sortierung=b">&darr;</a>';
    echo ' ';
    echo '<a href="Name_627.php?sortierung=ba">&uarr;</a>';
    echo '</th>';
    echo '<th>';
    echo 'Betrag ';
    echo '<a href="Name_627.php?sortierung=o">&darr;</a>';
    echo ' ';
    echo '<a href="Name_627.php?sortierung=oa">&uarr;</a>';
    echo '</th>';
    echo '<th>';
    echo 'Bemerkung ';
    echo '</th>';
    echo '<th>';
    echo ' Kz';
    echo '</th>';
    echo '</tr>';
    // -------------------------------------------------------------------
    for ($i = 0; $i < $anzahl_zeilen; $i++)
    {
    // var_dump($datum); // nur fuer Test
    $zeilenr++;
    echo '<tr';
    echo farbwechsel ( $zeilenr );
    echo '>';
    echo '<td>';
    echo $datum[$i];
    echo '</td>';
    echo '</td>';
    echo '<td>';
    echo $name[$i];
    echo '</td>';
    echo '</td>';
    echo '<td>';
    echo $betrag[$i];
    echo '</td>';
    echo '<td>';
    echo $bemerkung[$i];
    echo '</td>';
    echo '<td>';
    echo $kz[$i];
    echo '</td>';
    echo '</tr>';
    } }
    echo '</table>';
    // -----------------------------------------------------------
    function farbwechsel ( $zeilenr )
    {
    if ( bcmod ( $zeilenr , '2' ) == 0 ) {
    $hintergrundfarbe = ' bgcolor="#ACC8F0" ';
    } else
    { $hintergrundfarbe = ' bgcolor="#DDE8F9" '; }
    return ( $hintergrundfarbe );
    }
    ?>



    [/code]

  • Zitat von &quot;huberg&quot;

    Hallo WEB-Fans,


    Eure Unterstützung war gleich Null.


    Hallo huberg,


    das würde ich so nicht sagen. Vielleicht wusste einfach auch niemand eine Antwort auf dein Problem, wozu dann also antworten?


    Aber ist ja schön wenn sich dein Problem geklärt hat :)


    Greetz
    Laura


    PS.: Achja: Falls du nochmal ein Problem aus dem PHP-Bereich hast, solltest du es vielleicht darein posten und nciht ind en Bereich 'Homepage' - vielleicht schauen es sich dann auhc mehr Leute an und dir kann geholfen werden ;)


    AD: Ein Bild als Anhang einfach mit von einem Webserver einbinden oder die Adresse per einbinden ;)

  • Kleiner Fehler:


    Um die Zeile beim Sortieren zusammen zuhalten, muss im Code noch eine Erweiterung erfolgen.


    Alle Zeile mit:


    array_multisort($datum, SORT_ASC, $name, SORT_ASC,$betrag, SORT_ASC, $bemerkung, SORT_ASC,


    $kz, SORT_ASC); bzw.. SORT_DESC


    bitte dieses Arrays/Flags (hier bold) nachtragen.
    huberg

  • 1. Da er das Problem gelöst hat ist es denke ich nciht so schlimm.


    2. Mal eine Frage: Wenn dieser Thread am 18. Juni erstellt wurde und du sagst, dass du nicht antworten konntest, weil du im Urlaub warst... wieso gibt es dann einen Beitrag von dir vom 26. Juni?


    Nur als reine Verständnisfrage, nicht dass sich jemand in deinen Acc gehackt hat.


    Greetz
    Laura

  • keine ahnung.... frag ich mich auch gerade....


    18 Juni war ich ja noch da^^
    Muss ich wohl übersehen haben, sonst häffe ich gerne geholfen....


    liegt bestimmt daran, das ich manchmal die trends im Homepageforum per "forum als gelesen markieren" webklicke^^


    Sorry

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!