Php ertek keresese es kiirasa tömbböl

Php ertek keresese es kiirasa tömbböl
2014-08-08T13:21:28+02:00
2014-09-05T20:08:00+02:00
2022-08-09T01:55:29+02:00
laci8
Szervusztok!
Nem vagyok szakértője a témának így a segítségetekre szorulok.
Olyan problémám lenne, hogy egy .csv fájlból beolvasok adatokat. Ez egy táblázat. Ebben a táblázatban szeretnék keresni egy bevitelil mezőben megadott szó alapján ("keres"), és a kapott értéket táblázatosan megjeleníteni. Többszörös ciklusban gondolkodtam, de nem hozott eredményt.  
Eddig jutottam:
Köszönöm a segítségeteket előre is.

<?php
$ertek = $_POST["keres"];
//print $ertek;
$row = 1;
$handle = fopen("adat.csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$num = count($data);
echo "<tr>";
$talat=false;
foreach ($data as $cell) {
if ($cell == $ertek){

$talalt=true;
break;
//echo "<td>" .$cell. "</td>";
print $cell;
}
}
echo "</tr>";
}
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />";
}
fclose($handle);

?>
Mutasd a teljes hozzászólást!
Ez a kód eléggé több sebből vérző. Pl. ha van találat, akkor sem írod ki, mivel a break hatására kiugrik a ciklusból (így a benne lévő if-ből is, így a print le se fut). Aztán van egy $row változód, de minek. A while ciklus előtt egyre állítod, utána megnöveled, de nem használod sehol.

Valahogy így kéne kinéznie pszeudó kóddal:
0. post változó meglétének és tartalmának ellenőrzése, hibakezelés
1. file megnyitása, ha létezik, egyébként hibakezelés
2. sorok beolvasása ciklussal
2.a. az adott sor elemein végig tudsz rohanni foreach-el
2.a.I ellenőrzés, hogy az adott elem megegyezik-e a keresettel, ha igen, akkor egy táblázat kiírása* és egy találat változó beállítása -> itt nyomhatsz egy breaket is ha nem akarsz tovább keresni
2.b az összes ciklus lezárása
3. file lezárása
4. ha nem volt találat, a sikertelenség kiírása

* Gondolom az adott sort akarod kiírni táblázatba, amiben megtaláltad a keresett kifejezést. Erre én definiálnék egy függvényt és azt hívnám meg itt, átadva neki paraméterként az adott sort:
function printTable($row){ echo '<tr>'; foreach ($row as $e) echo '<td>',$e,'</td>'; echo '</tr>'; }
Mutasd a teljes hozzászólást!

  • Egyszer olvasd be a csv -t 1 tömbbe:

    $tomb = array(); while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { $tomb[] = $data; }
    Ha megvan a tömböd akkor kereshetsz benne, ez egy 2 dimenziós tömb lesz, tehát mindenképp kell egy for ciklus:

    foreach($tomb as $value){ if(in_array('keresett szó', $value)){ //találat } //ha meg tudod a beviteli mezőt azaz hányadik sor akkor ugy is kereshetsz if($value[mezőindex] == 'keresett szó'){ //találat } }
    Ezt beirhatod egy függvénybe és akkor arra keresel amire akarsz.
    Mutasd a teljes hozzászólást!
  • Ez a kód eléggé több sebből vérző. Pl. ha van találat, akkor sem írod ki, mivel a break hatására kiugrik a ciklusból (így a benne lévő if-ből is, így a print le se fut). Aztán van egy $row változód, de minek. A while ciklus előtt egyre állítod, utána megnöveled, de nem használod sehol.

    Valahogy így kéne kinéznie pszeudó kóddal:
    0. post változó meglétének és tartalmának ellenőrzése, hibakezelés
    1. file megnyitása, ha létezik, egyébként hibakezelés
    2. sorok beolvasása ciklussal
    2.a. az adott sor elemein végig tudsz rohanni foreach-el
    2.a.I ellenőrzés, hogy az adott elem megegyezik-e a keresettel, ha igen, akkor egy táblázat kiírása* és egy találat változó beállítása -> itt nyomhatsz egy breaket is ha nem akarsz tovább keresni
    2.b az összes ciklus lezárása
    3. file lezárása
    4. ha nem volt találat, a sikertelenség kiírása

    * Gondolom az adott sort akarod kiírni táblázatba, amiben megtaláltad a keresett kifejezést. Erre én definiálnék egy függvényt és azt hívnám meg itt, átadva neki paraméterként az adott sort:
    function printTable($row){ echo '<tr>'; foreach ($row as $e) echo '<td>',$e,'</td>'; echo '</tr>'; }
    Mutasd a teljes hozzászólást!
  • SalyT felsorolása 0. pont nélkül szabadon:

    class csvUtil { function csvUtil($file, $separator) { $this->file = $file; $this->separator = $separator; $this->readArray(); } function readArray() { $handle = fopen ($this->file, "r"); $i = 0; do { $this->buffer[$i] = fgets($handle); $this->buffer[$i] = explode($this->separator, $this->buffer[$i]); $i++; } while (!feof ($handle)); fclose ($handle); } function getField($row, $col) { $retval = $this->buffer[$row][$col]; return $retval; } function search($col, $expression) { $i = 0; $j = 0; do { if (@eregi($expression,$this->buffer[$i][$col])) { $retval[$j] = $i; $j++; } $i++; } while ($this->buffer[$i][0]); return $retval; } function numRows() { $retval = count($this->buffer); return $retval; } function numCols() { $retval = count($this->buffer[0]); return $retval; } }
    Kiiratás:

    $websites = new csvUtil("websites.csv", ","); define (NAME, "0"); define (URL, "1"); echo "<B>Teljes: content.</B><BR>"; $i = 0; while ($result = $websites->getField($i, NAME)) { $link = $websites->getField($i, URL); echo "<A HREF='$link'>$result</A><BR>"; $i++; } ?> <BR><BR><B>Keresés a.....</B><BR> <? $result = $websites->search(NAME, "php"); $i = 0; do { $name = $websites->getField($result[$i], NAME); $link = $websites->getField($result[$i], URL); echo "<A HREF='$link'>$name</A><BR>"; $i++; } while ($result[$i]
    Mutasd a teljes hozzászólást!
  • Sziasztok!
    Köszönöm a hozzászólásokat, kis türelmet kérek!
    Üdv
    Mutasd a teljes hozzászólást!
  • Köszönöm a javaslatiotokat Sokat segítettek, de legalábbis a helyes irányt megtalálni. Elnézést attól, aki nem ért egyet a döntésemmel.
    Mégegyszer köszönöm!
    Mutasd a teljes hozzászólást!
abcd