Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » Textdatei sortieren mit PHP Antworten
Textdatei sortieren mit PHP

raiserle
Fachidiot


Beiträge: 144


was ich bei diesem uralten Problem nicht verstehe.
warum speichert ihr die daten denn nicht gleich als array mit einem incrementellen wert.
spart zeit und arbeit.

die datensätze müssten dann ungefähr so aussehen
$[m][0][vorname]="gustav";$[m][0][name]="mustermann";$[m][0][xyz]="wert";
$[m][1][vorname]="egon";$[m][1][name]="musterfrau";$[m][1][xyz]="blabla";

wenn man das gleich so speichert, hat man viel weniger arbeit, man muss dann nicht erst den ganzen quatsch in dieser form wieder aufbereiten.
lexx, zu dir. wenn du die daten in dieser form durch dein script aufbereitet hasst,
sollte sich die fragen, nach dem:
Wie sortiere ich nun nach dem 2. Feld?
erübrigt haben.

---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

  Profil   E-Mail   Website   Editieren   Zitieren

lexx
Pixelschubser


Beiträge: 5



lexx, zu dir. wenn du die daten in dieser form durch dein script aufbereitet hasst,
sollte sich die fragen, nach dem:
Wie sortiere ich nun nach dem 2. Feld?
erübrigt haben.


entschuldige das man überhaupt fragt, nu bin ich genauso schlau wie vorher....
endlich jemand der weiss wie es geht und es tapfer für sich behält...

bei mir sind doch eh so gespeichert, wobei $id das erste array ist.
$m[0][vorname]="gustav"; $m[0][name]="mustermann";
$m[1][vorname]="egon"; $m[1][name]="musterfrau"; $m[1][xyz]="blabla";

und sort ( $m[$id][vorname] ); führt leider permanent zu nem fehler
Warning: sort() expects parameter 1 to be array

davon abgesehen

$[m][0][vorname]="gustav";

hä, haste dich da nicht bei $[m] verschieben ?

und kannste nichtmal die ganze funktion aufschreiben damit man weiss wo du das sort einfügst.

Diese Nachricht wurde geändert von: lexx
  Profil   Editieren   Zitieren

languitar
Foren-Team


Beiträge: 2795


raiserle schrieb am 18.09.2006 14:54
$[m][0][vorname]="gustav";$[m][0][name]="mustermann";$[m][0][xyz]="wert";
$[m][1][vorname]="egon";$[m][1][name]="musterfrau";$[m][1][xyz]="blabla";


Überleg noch mal, was du da gepostet hast? Das ist ja nicht mal valide PHP-Syntax.

http://de.php.net/manual/de/function.array-multisort.php könnt dir helfen.

---
Take a look here!
Lichtblick - Einblick - Ausblick

  Profil   E-Mail   Website   Editieren   Zitieren

lexx
Pixelschubser


Beiträge: 5



http://de.php.net/manual/de/function.array-multisort.php könnt dir helfen.


hab ich auch versucht, kommen auch nur fehler raus


function sortieren ($datei, $f) // $f ist das feld welches sortiert werden soll...
{
$i = 0;
$fp = @fopen($datei,"r"); $ds=count($datei);
while ($inhalt= @fgets($fp,1000))
{
$feld=explode("|",$inhalt); $daten[$i] = array ($feld[1],$feld[2],$feld[3]); $i++;
}
@fclose($fp);
for($y=0;$y<$ds;$y++)
{
sort ( $daten[$y][$f]); //oder alternativ
//array_multisort($y, $f);
echo "sortiere ".$daten[$y][$f]."<br>";
};
};

Fehler bei sort:
sort() expects parameter 1 to be array, string given in

Fehler bei array_multisort:
Argument #1 is expected to be an array or sorting flag that has not already been specified

  Profil   Editieren   Zitieren

raiserle
Fachidiot


Beiträge: 144


ja wohl wahr $m
;)

und man sollte die datenstruktur noch ein wenig anders wählen, damit es leichter
zu sortieren ist. vielelicht den index hintendran hängen

$m[vorname][0]="Herbert";$m[name][0]="Test";$m[ort][0]="Hier";
$m[vorname][1]="Detlef";$m[name][1]="Mustermann";$m[ort][1]="Nirgendwo";

und vielleicht solltet ihr mal weniger rummaulen und eher mehr die manuals auf php.net
lesen. ganz zu schweigen von der grauen masse anzuschmeissen. es hat auch nichts
damit zu tun etwas für mich zu behalten, eher mehr damit, die faulen nicht zu ermutigen immer nur fragen zu stellen.
als ratschlag und hilfe:
-übernimm die datenstruktur so wie dort oben
-benutze natcasesort(); auf das array
-benutze danach eine foreach() und setze das indize welches nach dem sortieren
von dem jeweiligen assozitaiv-array kommt auf $m[assoziativ][indize] ein

noch nen kleiner tip:

foreach($m[$wonach_sortieren] AS $indize => $wert)

---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

  Profil   E-Mail   Website   Editieren   Zitieren

lexx
Pixelschubser


Beiträge: 5



es hat auch nichts damit zu tun etwas für mich zu behalten,
eher mehr damit, die faulen nicht zu ermutigen immer nur fragen zu stellen.


von wegen faulheit, seit 14 tagen versuch ich es und kriegs nicht hin
und bei 3000 zeilen code ist ja wohl von faulheit auch keine rede.
da erwartet man nen bisschen hilfe und kriegt nur unverständliche
antworten mit denen man auch nichts anfangen kann..
klasse... echt, danke,
die eine hälfte der möchtegern-programmierer wissen auch nicht wie´s geht,
und die andere hälfte hält sich für so überschlau das se meint ihr chinesisch
sei ja wohl eindeutig ...



als ratschlag und hilfe:
-übernimm die datenstruktur so wie dort oben
-benutze natcasesort(); auf das array
-benutze danach eine foreach() und setze das indize welches nach dem sortieren
von dem jeweiligen assozitaiv-array kommt auf $m[assoziativ][indize] ein



ich versteh das nicht, ist denn das sooo schwer zu verstehen ???

foreach($m[$wonach_sortieren] AS $indize => $wert)

ich hab numal keine $wonach_sortieren - Variable...
und ich hab auch keine $indize, und $wert hab ich auch nicht
und ich weiss auch nicht was du da in deiner göttlichen klugheit da
gern sehen würdest..

und das manual hab ich schon so oft studiert das ich es vorbeten kann,
nur geholfen hat es nicht...

meine datenstruktur ist so..
$daten[$i] = array ($feld[1],$feld[2],$feld[3]);
und nicht umgedreht...und ich möchte nichts anderes als nach $feld xyz sortieren

das kann doch nicht so schwer sein das mal verständlich
und so zu demonstrieren das der rest der menschheit auch mal nen erfolgserlebnis hat.

ich brauch nen richtig anständiges beispiel was nicht "detlev" vor "mustermann" setzt
sondern "Mustermann" vor "test" und idealerweise auch noch 2434 vor 11432.

sorry aber ich bin nicht als göttlicher php-programmierer ausm ei gekrabbelt
sondern nur nen otto-normal-sterblicher der hilfe sucht, weil ers allein einfach nicht begreift.

das ist übrigens mein 4. Beitrag !

Diese Nachricht wurde geändert von: lexx
  Profil   Editieren   Zitieren

raiserle
Fachidiot


Beiträge: 144


siehste, und schon wieder nicht drüber nachgedacht.
ich werde dir den quellcode hierzu nicht posten, da er, wenn du die 3 anhaltspunkte
so nimmst, wie sie dastehen, nicht einmal 5 zeilen code ausmachen..

das problem, den incrementellen wert als erstes in der datenstruktur zu bringen führt eben immer dazu, das du nen fehler erhälts.
deswegen ahtte ich dir ja geraten, es sorum zu machen.

der name der arrayvariablen gefollgt von dem assoziativarray was der vorname oder name sein kann dieser wiederrum enthält das array mit dem incrementellen indize

$m[vorname][0]="Max";

und dummstellen muss man sich schon gar nicht. du sagtest du wolltest sortieren, bitte:
$wonach_sortieren, oder $indize oder... oder...
irgendwoher muss ich doch wissen wonach.
also steht in $wonach_sortieren der assoziative index. eben vorname, name oder ort..

ach egal habs satt zu erklären.. hier haste dein achso hochkoplexer quellcode...

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22:
<?php
$m[vorname][0]="Herbert";$m[name][0]="Test";$m[ort][0]="Hier";
$m[vorname][1]="Detlef";$m[name][1]="Mustermann";$m[ort][1]="Nirgendwo";

echo "Wonach wollen Sie sortieren<br />";

foreach($m AS $data => $wert){
        echo '<a href="?sort='.$data.'">'.$data.'</a> ' ;
}

if($_GET['sort']){
    $wonach_sortieren=$_GET['sort'];    // 1. zeile code
    echo $wonach_sortieren."<br />";
    natcasesort($m[$wonach_sortieren]);    // 2. zeile code
    foreach($m[$wonach_sortieren] AS $indize => $wert){    // 3. zeile
        echo $m[vorname][$indize]." ".$m[name][$indize]." ".$m[ort][$indize]."<br />";    // 4. zeile
    }    // 5. zeile
}

?>


und jetzt frag nicht wieso nur 5 zeilen code oder was jede zeile macht.. finds selber raus.
sorry bei solch unüberlegtem rumgepflaume, da kommt mir....

übrigens... mit so einer einstellung kommste nicht weit, egal wo.


---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

  Profil   E-Mail   Website   Editieren   Zitieren

lexx
Pixelschubser


Beiträge: 5


Erfolgsmitteilung: Problem gelöst, patient tot
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27:
function sortieren ($datei, $f)
{
 $i = 0; 
 $fp = @fopen($datei,"r"); $ds=count($datei);
    while ($inhalt= @fgets($fp,1000)) 
 {   
      $feld=explode("|",$inhalt); 
   echo "lese feld1 = $feld[1] "; 
   $daten1 = array ("feld1"=>$feld[1], "feld2"=>$feld[2],"feld3"=>$feld[3],"feld4"=>$feld[4],"feld5"=>$feld[5]);
   echo "noch da: daten1 = $daten1[feld1] ";
   $daten = array ($daten1, $i);
   echo "schwups weg: daten = ".$daten[feld1][$i]."
";
   $i++;
    } 
   @fclose($fp); 
   
   
   for($y=0;$y<$ds;$y++) 
   {  
   echo "DS $y = ".$daten[feld1][$y]."  - ".$daten[feld2][$y]."  - ".$daten[feld3][$y]." 
"; 
   };

return "Daten weggezaubert nu gibbed nücht mehr zu sortiere...";
}


neues problem, suche strick zum aufhängen

Diese Nachricht wurde geändert von: lexx
  Profil   Editieren   Zitieren
Seite 1 | 2  

Antworten
Nach oben