Vollpfosten: ksort

hallo,
wie kriege ich das hier irgendwie hin, das ich die besten 5 ergebnisse mit ksort abhole:
<?php
$row = 1;
$fp = fopen ("filialen.csv","r");
$diff = 20000;
while ($data = fgetcsv($fp, 1000, ";")) {
//Nur bei einer bestimmten Vertriebslinie nachschauen
if (abs($data[2] - $PLZ) < $diff) {
$key=$diff;
$result[$key]=$data;
tips?

  1. Huhu Vollpfosten

    mmh, das kommt mir irgendwie bekannt vor ;-)

    Vielleicht funktioniert es in etwa so:

    $row = 1;
    $fp = fopen ("filialen.csv","r");
    $diff = 20000;
    $stack_of_results=array();
    while ($data = fgetcsv($fp, 1000, ";")) {
     if (abs($data[2] - $PLZ) < $diff) {
      $key=$diff;
      $stack_of_results[$key][]=$data; # Achtung $diff ist nicht unique, daher hier als ArrayOfArrays speichern }
    }
    ksort($stack_of_results);
    $output = array_slice ($stack_of_results, 0, 5);
    $c=0;
    foreach($output as $v){
      $c++;
      echo 'Ergebnis '.$c;
     foreach($v as $one){
      echo join(', ',$one).'<hr>';
     }
    }

    Viele Grüße

    lulu

    1. diesmal keine ... :)
      ich kriege die fehlermeldung in zeile 35, das bedeutet </table>, wieso, hier nochmal der ganze code:
      #!/usr/local/bin/php
      <table border="1">
        <thead>
      <tr>
      <th>Filiale</th><th>Nr.</th><th>PLZ</th><th>Ort</th>
      <th>Strasse</th><th>Marktleiter</th><th>Fleischabtltr.</th>
      <th>Telefon</th><th>Telefax</th><th>Email</th>
      </tr>
        </thead>
        <tbody>
      <?php
      $row = 1;
      $fp = fopen ("filialen.csv","r");
      $diff = 20000;
      $stack_of_results=array();
      while ($data = fgetcsv($fp, 1000, ";")) {
       if (abs($data[2] - $PLZ) < $diff) {
        $key=$diff;
        $stack_of_results[$key][]=$data; # Achtung $diff ist nicht unique, daher hier als ArrayOfArrays speichern }
      }
      ksort($stack_of_results);
      $output = array_slice ($stack_of_results, 0, 5);
      $c=0;
      foreach($output as $v){
        $c++;
        echo 'Ergebnis '.$c;
       foreach($v as $one){
        echo join(', ',$one).'<hr>';
       }
      }

      ?>
        </tbody>
      </table> // hier der fehler

      Huhu Vollpfosten

      mmh, das kommt mir irgendwie bekannt vor ;-)

      Vielleicht funktioniert es in etwa so:

      $row = 1;
      $fp = fopen ("filialen.csv","r");
      $diff = 20000;
      $stack_of_results=array();
      while ($data = fgetcsv($fp, 1000, ";")) {
      if (abs($data[2] - $PLZ) < $diff) {
        $key=$diff;
        $stack_of_results[$key][]=$data; # Achtung $diff ist nicht unique, daher hier als ArrayOfArrays speichern }
      }
      ksort($stack_of_results);
      $output = array_slice ($stack_of_results, 0, 5);
      $c=0;
      foreach($output as $v){
        $c++;
        echo 'Ergebnis '.$c;
      foreach($v as $one){
        echo join(', ',$one).'<hr>';
      }
      }

      Viele Grüße

      lulu

      1. diesmal keine ... :)
        ich kriege die fehlermeldung in zeile 35, das bedeutet </table>, wieso, hier nochmal der ganze code:

        while ($data = fgetcsv($fp, 1000, ";")) {
        if (abs($data[2] - $PLZ) < $diff) {
          $key=$diff;
          $stack_of_results[$key][]=$data; # Achtung $diff ist nicht unique, daher hier als ArrayOfArrays speichern }
        }
        ksort($stack_of_results);
        $output = array_slice ($stack_of_results, 0, 5);
        $c=0;
        foreach($output as $v){
          $c++;
          echo 'Ergebnis '.$c;
        foreach($v as $one){
          echo join(', ',$one).'<hr>';
        }
        }

        weil dir hier ein } fehlt, das } daß du _nach_ dem kommentar geschrieben hast bleibt kommentar

        Achtung $diff ist nicht unique, daher hier als ArrayOfArrays speichern }

        lg
        Ludwig

        1. Nun kriege ich aber alles angezeigt und nicht die 5 besten ergebnisse
          unter www.vizacon.de/coop/php2.html

          diesmal keine ... :)
          ich kriege die fehlermeldung in zeile 35, das bedeutet </table>, wieso, hier nochmal der ganze code:

          while ($data = fgetcsv($fp, 1000, ";")) {
          if (abs($data[2] - $PLZ) < $diff) {
            $key=$diff;
            $stack_of_results[$key][]=$data; # Achtung $diff ist nicht unique, daher hier als ArrayOfArrays speichern }
          }
          ksort($stack_of_results);
          $output = array_slice ($stack_of_results, 0, 5);
          $c=0;
          foreach($output as $v){
            $c++;
            echo 'Ergebnis '.$c;
          foreach($v as $one){
            echo join(', ',$one).'<hr>';
          }
          }

          weil dir hier ein } fehlt, das } daß du _nach_ dem kommentar geschrieben hast bleibt kommentar

          Achtung $diff ist nicht unique, daher hier als ArrayOfArrays speichern }

          lg
          Ludwig

          1. so, habe ein problem gelöst, kriege die 5 besten ergebniss in einer tabelle angezeigt, nun habe ich aber das problem, das es nicht die 5 besten ergebnisse sind.
            wenn ich zum beispiel 24105 angebe, dann muesste er ja die 5 besten in unmittelbarer nähe von 24105 angeben, driekt in der näche sind ungefähr 10 filialen
            ich kriege aber 5 filialen angezeigt, die nicht in unmittelbarer nähe sind, aber in der differenz von $diff = 1000;
            wenn ich also z.b. $diff = 10 eingebe und dann nach 24105 eingebe, dann bekomme ich alle in der unmittelbaren näche angezeigt, wie ich es haben mächte, erhöhe ich die differenz wird der wert wieder ungenauer, wenn ich dann mal ne plz eingebe, wo in der näche keine filiale ist, kriege ich auch nichts angezeigt, das ist irgendwie doof
            gibt es da keine bessere lösung

            gebt mal unter
            www.vizacon.de/coop/php2.html
            24105 ein und ihr kriegt  filialen aus büddelsodrf, aus lübeck angezeigt und nicht nur aus kiel, obwohl kiel mehr als 10 filialen hat

            Nun kriege ich aber alles angezeigt und nicht die 5 besten ergebnisse
            unter www.vizacon.de/coop/php2.html

            diesmal keine ... :)
            ich kriege die fehlermeldung in zeile 35, das bedeutet </table>, wieso, hier nochmal der ganze code:

            while ($data = fgetcsv($fp, 1000, ";")) {
            if (abs($data[2] - $PLZ) < $diff) {
              $key=$diff;
              $stack_of_results[$key][]=$data; # Achtung $diff ist nicht unique, daher hier als ArrayOfArrays speichern }
            }
            ksort($stack_of_results);
            $output = array_slice ($stack_of_results, 0, 5);
            $c=0;
            foreach($output as $v){
              $c++;
              echo 'Ergebnis '.$c;
            foreach($v as $one){
              echo join(', ',$one).'<hr>';
            }
            }

            weil dir hier ein } fehlt, das } daß du _nach_ dem kommentar geschrieben hast bleibt kommentar

            Achtung $diff ist nicht unique, daher hier als ArrayOfArrays speichern }

            lg
            Ludwig

      2. Huhu

        ich kriege die fehlermeldung in zeile 35, das bedeutet </table>,

        Der Fehler muss nicht zwangsläufig in der Zeile die in der Fehlermeldung angegeben wird stecken.
        Da stimmt vermutlich etwas mit den Klammern nicht

        $stack_of_results[$key][]=$data; # Achtung $diff ist nicht unique, daher hier als ArrayOfArrays speichern }

        Da ist mir die }-Klammer in die Kommentarzeile gerutscht.
        Also das } muss in die nächste Zeile.

        Viele Grüße

        lulu