Problem mit natsort u. natcasesort

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit natsort u. natcasesort

    Hallo zusammen

    Ich habe hier ein Problem mit natsort und mit natcasesort, die beiden Funktionen tun einfach nichts.
    Ich habe natcasesort in einen Script verwendet um den Verzeichnisinhalt aufzulisten. Das hat schon mal funktioniert, aber vor ein paar Tagen viel mir dann auf das da nichts mehr sortiert wird. Ich habe auch mal mit einem kleinem Beispiel probiert, das Ergebnis ist das selbe - sort funktioniert aber natsort u. natcasesort tun nichts.

    das Ergebnis sieht bei mir dann in etwa so aus (1.Spalte unsortiert, 2. sort, 3. natsort, 4. natcasesort)

    j B j j
    e C e e
    I F I I
    R I R R
    F R F F
    z b z z
    o e o o
    b j b b
    C o C C
    B z B B

    und hier der Script

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 //EN">
    <html>
    <head>
    <title>Test natcasesort</title>
    <meta name="generator" content="HTML Studio">
    </head>
    <body>
    <?php
    echo '
    <table cellspacing="3">';
    $n = 10;
    $a1 = array();
    $a2 = array();
    $a3 = array();
    mt_srand((double)microtime()*1000000);
    for ($i = 0; $i < $n; $i++)
    {
    do
    {
    $z = mt_rand(65, 122);
    }
    while ($z > 90 and $z < 97);
    $a1[] = chr($z);
    }
    $a4 = $a3 = $a2 = $a1;
    sort($a2);
    natsort($a3);
    natcasesort($a4);
    for($i = 0; $i < $n; $i++)
    {
    echo '
    <tr align="center">
    <td bgcolor="#C8C8C8" width="50">
    '.$a1[$i].'
    </td>
    <td bgcolor="#C8C8C8" width="50">
    '.$a2[$i].'
    </td>
    <td bgcolor="#C8C8C8" width="50">
    '.$a3[$i].'
    </td>
    <td bgcolor="#C8C8C8" width="50">
    '.$a4[$i].'
    </td>
    </tr>';
    }
    echo '
    </table>';
    ?>
    </body>
    </html>

    MfG Mike

  • #2
    sortiert wird das schon richtig, lass dir $a4 mal mit print_r ausgeben

    das problem ist die tatsache, dass natcasesort und co. zwar sortieren, aber die index-wert-kombinationbeibehalten und wenn du von 0 bis 9 ausgibst bringt das sortieren nix

    steht aber im manual ink. hinweis um das zu umgehen
    Ich denke, also bin ich. - Einige sind trotzdem...

    Comment


    • #3
      @mrhappiness

      danke für den Hinweis.
      Ich habe es auch gerade gemerkt, das der Index beibehalten wird. Ich habe dir Schleife auf

      reset($a1);
      reset($a2);
      reset($a3);
      reset($a4);
      for($i = 0; $i < $n; $i++)
      {
      echo '
      <tr align="center">
      <td bgcolor="#C8C8C8" width="50">
      '.current($a1).'
      </td>
      <td bgcolor="#C8C8C8" width="50">
      '.current($a2).'
      </td>
      <td bgcolor="#C8C8C8" width="50">
      '.current($a3).'
      </td>
      <td bgcolor="#C8C8C8" width="50">
      '.current($a4).'
      </td>
      </tr>';
      next($a1);
      next($a2);
      next($a3);
      next($a4);
      }

      geändert und so funktioniert es. Auf die Idee mit dem Index hätte ich etwas eher kommen können, nicht erst nachdem ich mich zwei Tage damit herumgeärgert habe.

      MfG Mike

      Comment


      • #4
        du kannst die schleifen auch mit foreach machen, bzw. mit array_values dein array neu nummerieren (nur so als anregung für alternativen)
        Ich denke, also bin ich. - Einige sind trotzdem...

        Comment


        • #5
          @mrhappiness

          danke für den Tip mit array_values

          MfG Mike

          Comment

          Working...
          X