ich mal wieder, möchte gerne mehrere ergebnisse haben
Vollpfosten
- php
0 lulu0 Vollpfosten0 Vollpfosten0 lulu
0 Vollpfosten0 lulu
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
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
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
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
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
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
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