Vollpfosten: ich mal wieder, möchte gerne mehrere ergebnisse haben

ich würde gerne mehr als ein ergebnis aus meiner abfrage bekommen
das script lautet:
<?php
$row = 1;
$fp = fopen ("filialen.csv","r");
$diff = 10000;
while ($data = fgetcsv($fp, 1000, ";")) {
//Nur bei einer bestimmten Vertriebslinie nachschauen
if ($data[0] != $Vertriebsl) continue;
//Den besten Treffer merken
if (abs($data[2] - $PLZ) < $diff) {
$result = $data;
$diff = abs($data[2] - $PLZ);
}
}

wie kriege ich das nun hin, das z.B. 5 ergebnisse die der Abfrage am nahesten liegen ausgegeben werden und nicht wie momentan unter
www.vizacon.de/coop/php.html nur eines

  1. Huhu Vollpfosten

    ich würde gerne mehr als ein ergebnis aus meiner abfrage bekommen
    das script lautet:
    <?php
    $row = 1;
    $fp = fopen ("filialen.csv","r");
    $diff = 10000;
    while ($data = fgetcsv($fp, 1000, ";")) {
    //Nur bei einer bestimmten Vertriebslinie nachschauen
    if ($data[0] != $Vertriebsl) continue;
    //Den besten Treffer merken
    if (abs($data[2] - $PLZ) < $diff) {
    $result = $data;
    $diff = abs($data[2] - $PLZ);
    }
    }

    wie kriege ich das nun hin, das z.B. 5 ergebnisse die der Abfrage am nahesten liegen ausgegeben werden und nicht wie momentan unter
    www.vizacon.de/coop/php.html nur eines

    Du kannst $result als array benutzen und dann hängst Du in Deinem if-Zweig immer ein Ergebnis an

    $result[]=$data;

    Dann bekommst Du alle Treffer < $diff

    Wenn Du die besten 5 haben möchtest könntest Du einen Key benutzen
    $key=$diff;
    $result[$key]=$data;

    Dann ksort, und die ersten 5 Elemente abholen.

    Damit der $key unique ist noch eine Laufvariable oder ID mit eincodieren.

    So ungefähr.

    Noch besser eine Datenbank benutzen.

    Viele Grüße

    lulu

    1. Huhu Lulu,
      danke für die Antwort, mal sehen ob ich das hinbekommen, bin nämlich kein PHP experte.
      Ich muss leider ne csv benutzen, weil der kunde das so vorschreibt.
      erstmal danke
      ich versuchs

      Huhu Vollpfosten

      ich würde gerne mehr als ein ergebnis aus meiner abfrage bekommen
      das script lautet:
      <?php
      $row = 1;
      $fp = fopen ("filialen.csv","r");
      $diff = 10000;
      while ($data = fgetcsv($fp, 1000, ";")) {
      //Nur bei einer bestimmten Vertriebslinie nachschauen
      if ($data[0] != $Vertriebsl) continue;
      //Den besten Treffer merken
      if (abs($data[2] - $PLZ) < $diff) {
      $result = $data;
      $diff = abs($data[2] - $PLZ);
      }
      }

      wie kriege ich das nun hin, das z.B. 5 ergebnisse die der Abfrage am nahesten liegen ausgegeben werden und nicht wie momentan unter
      www.vizacon.de/coop/php.html nur eines

      Du kannst $result als array benutzen und dann hängst Du in Deinem if-Zweig immer ein Ergebnis an

      $result[]=$data;

      Dann bekommst Du alle Treffer < $diff

      Wenn Du die besten 5 haben möchtest könntest Du einen Key benutzen
      $key=$diff;
      $result[$key]=$data;

      Dann ksort, und die ersten 5 Elemente abholen.

      Damit der $key unique ist noch eine Laufvariable oder ID mit eincodieren.

      So ungefähr.

      Noch besser eine Datenbank benutzen.

      Viele Grüße

      lulu

    2. huhu,
      das mit dem ksort bekomme ich nicht hin

      Huhu Vollpfosten

      ich würde gerne mehr als ein ergebnis aus meiner abfrage bekommen
      das script lautet:
      <?php
      $row = 1;
      $fp = fopen ("filialen.csv","r");
      $diff = 10000;
      while ($data = fgetcsv($fp, 1000, ";")) {
      //Nur bei einer bestimmten Vertriebslinie nachschauen
      if ($data[0] != $Vertriebsl) continue;
      //Den besten Treffer merken
      if (abs($data[2] - $PLZ) < $diff) {
      $result = $data;
      $diff = abs($data[2] - $PLZ);
      }
      }

      wie kriege ich das nun hin, das z.B. 5 ergebnisse die der Abfrage am nahesten liegen ausgegeben werden und nicht wie momentan unter
      www.vizacon.de/coop/php.html nur eines

      Du kannst $result als array benutzen und dann hängst Du in Deinem if-Zweig immer ein Ergebnis an

      $result[]=$data;

      Dann bekommst Du alle Treffer < $diff

      Wenn Du die besten 5 haben möchtest könntest Du einen Key benutzen
      $key=$diff;
      $result[$key]=$data;

      Dann ksort, und die ersten 5 Elemente abholen.

      Damit der $key unique ist noch eine Laufvariable oder ID mit eincodieren.

      So ungefähr.

      Noch besser eine Datenbank benutzen.

      Viele Grüße

      lulu

      1. Helau (immer nur huhu wird irgendwann lanweilig ;-)

        das mit dem ksort bekomme ich nicht hin

        dann schau Dir nochmal genau die Erläuterungen zu Arrays an.
        Z.B. bei http://php.net oder in irgendeinem Buch oder Tutorial.
        Nimm Dir in Ruhe mal alle Array-Funktionen vor und experimentiere herum bis Du die einzelnen Funktionen verstanden hast.
        Array sind nämlich _sehr_ nützlich.

        Viele Grüße

        lulu

    3. Huhu Vollpfosten

      ich würde gerne mehr als ein ergebnis aus meiner abfrage bekommen
      das script lautet:
      <?php
      $row = 1;
      $fp = fopen ("filialen.csv","r");
      $diff = 10000;
      while ($data = fgetcsv($fp, 1000, ";")) {
      //Nur bei einer bestimmten Vertriebslinie nachschauen
      if ($data[0] != $Vertriebsl) continue;
      //Den besten Treffer merken
      if (abs($data[2] - $PLZ) < $diff) {
      $result = $data;
      $diff = abs($data[2] - $PLZ);
      }
      }

      wie kriege ich das nun hin, das z.B. 5 ergebnisse die der Abfrage am nahesten liegen ausgegeben werden und nicht wie momentan unter
      www.vizacon.de/coop/php.html nur eines

      Du kannst $result als array benutzen und dann hängst Du in Deinem if-Zweig immer ein Ergebnis an

      $result[]=$data;

      Dann bekommst Du alle Treffer < $diff

      Wenn Du die besten 5 haben möchtest könntest Du einen Key benutzen
      $key=$diff;
      $result[$key]=$data;

      Dann ksort, und die ersten 5 Elemente abholen.

      Damit der $key unique ist noch eine Laufvariable oder ID mit eincodieren.

      So ungefähr.

      Noch besser eine Datenbank benutzen.

      Viele Grüße

      lulu

      Hier mal das ganze script:
      #!/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;
      while ($data = fgetcsv($fp, 1000, ";")) {
      //Nur bei einer bestimmten Vertriebslinie nachschauen
      //if ($data[0] != $Vertriebsl) continue;
      //Den besten Treffer merken
      if (abs($data[2] - $PLZ) < $diff) {
      $result = $data;
      $diff = abs($data[2] - $PLZ);
      }
      }

      echo "<tr>";
      echo "<td>" . $result[0] . "</td>";
      echo "<td>" . $result[1] . "</td>";
      echo "<td>" . $result[2] . "</td>";
      echo "<td>" . $result[3] . "</td>";
      echo "<td>" . $result[4] . "</td>";
      echo "<td>" . $result[5] . "</td>";
      echo "<td>" . $result[6] . "</td>";
      echo "<td>" . $result[7] . "</td>";
      echo "<td>" . $result[8] . "</td>";
      echo "<td>" . $result[9] . "</td>";
      echo "</tr>";

      kriege wenn ich deinen lösungsvorschlag einbaue nur array in den spalten angezeigt

      1. Huhu Vollpfosten

        echo "<tr>";
        echo "<td>" . $result[0] . "</td>";
        echo "<td>" . $result[1] . "</td>";
        echo "<td>" . $result[2] . "</td>";
        echo "<td>" . $result[3] . "</td>";
        echo "<td>" . $result[4] . "</td>";
        echo "<td>" . $result[5] . "</td>";
        echo "<td>" . $result[6] . "</td>";
        echo "<td>" . $result[7] . "</td>";
        echo "<td>" . $result[8] . "</td>";
        echo "<td>" . $result[9] . "</td>";
        echo "</tr>";

        kriege wenn ich deinen lösungsvorschlag einbaue nur array in den spalten angezeigt

        Das ist auch korrekt, da Du dann ein Array von Arrays hast.

        Um einen einzelnen Wert auszulesen musst Du dann beide Indizes angeben.
        Also z.B.
        echo $result[1][3];

        Oder du machst eine foreach-schleife

        foreach($result as $one){
         echo $one[2]; # $one entspricht dabei dem ursprünglichen Array $data
        }

        Die Ausgabe könnte man z.B. auch so machen

        echo '<tr><td>'.join('</td><td>',$result).'</td></tr>';

        Viele Grüße

        lulu