Mehrere Dateien hintereinander öffnen und Anzahl bst. Zeichen bestimmen

JackT

Grünschnabel
Hallo,

ich habe da mal wieder ein kleines Problemchen, wo mir vermutlich nur der Aufhänger fehlt. Ich hoffe also, diesen zu bekommen. Aber bitte nur diesen. Ich möchte versuchen es weitgehend selber zu schaffen- das macht am meisten Spaß ;)

Also dann:
Ich möchte die gesamt-Anzahl bestimmter Trennzecihen in mehreren Dateien bestimmen. Wie es mit einer Datei geht habe ich schon:

Code:
$file = file( "comments/".$image.".php" );
$trenner = '<hr>';
$anzahl = count( explode( $trenner, $file[0] ) ) - 1; 
echo $anzahl;

Nun habe ich in einem Order aber mehrere Dateien. Wie ich alle Dateien in ein Array lesen kann, habe ich auch bereits geschafft:

Code:
$commcount = array();
$folder2 = opendir('./comments');
while($file2 = readdir($folder2)) 
{  
$info = @getimagesize($file2);  
if($file2 != "." && $file2 != ".." &&  !is_dir($file2) ) 
{
array_push($commcount, $file2);
}
}
closedir($folder2);

Doch wie kann ich das nun miteinander verbinden? Oder bin ich völlig auf dem Holzweg?!

Ich möchte dahin kommen, dass mir die Anzahl sämtlicher des gesuchten Trennzeichens aus sämtlichen Dateien angezeigt wird. Da der Ordnerinhalt variabel ist, kann ich die Dateien nicht einfach nacheinander öffnen, für jedes eine anzahl Variable erstellen und diese addieren...

Also wenn mir da jemand nen Tip geben kann: TOP!
 
Mein Vorschlag...
Du liest die Dateien aus dem Verzeichnis aus... [phpf]glob[/phpf]
Dann liest du alle Dateiinhalte in einen String... [phpf]file_get_contents[/phpf] und String Verkettung
Und dann zählst du mit [phpf]substr_count[/phpf], wie oft <hr> ersetzt wurde...

PHP5.1+ Lösung.
 
klingt gut, das werde ich mal versuchen. ich hatte bis jetzt folgendes versucht:
Code:
$commcount = array();
$folder2 = opendir('./comments');
while($file2 = readdir($folder2)) 
{  
$info = @getimagesize($file2);  
if($file2 != "." && $file2 != ".." &&  !is_dir($file2) ) 
{
array_push($commcount, $file2);
}
}
closedir($folder2);
sort($commcount, SORT_NUMERIC);
foreach ($commcount as $key) {
$key = 'comments/'.$key;
$file = file( $key );
$trenner = '<hr>';
$anzahl = count( explode( $trenner, $file[0] ) ) - 1; 
echo  $anzahl;
echo '<br>';
}

Das gibt mir die Menge der <hr>´s in jeder einzelnen Datei wieder aber wie man das addiert habe ich noch nicht herausgefunden. Ich denke, deine Lösung sollte bei weitem professioneller sein. Oder sehe ich das falsch?
 
Du deklarierst eine Variable außerhalb der Schleife. In der Schleife addierst du zu dieser Variable dann die neue Anzahl.
 
Das klingt einleuchtend aber ich habe jetzt gott weiß was versucht- wo genau soll ich die Variable definieren und wie addiere ich dann? Wenn ich die Variable vor dem foreach oder dem while deklariere und in dem foreach +$anzahl anhänge bleibt am ende außerhalb und nach der Schleife echo $variable; ausgeben lasse, hat sie den Wert den ich ihr vor der Schleife gegeben habe.
 
Ha, danke. Mit dem Denkanreit hab ichs jetzt:

Code:
$ausgabearray = array();
$commcount = array();
$folder2 = opendir('./comments');
while($file2 = readdir($folder2)) 
{  
$info = @getimagesize($file2);  
if($file2 != "." && $file2 != ".." &&  !is_dir($file2) ) 
{
array_push($commcount, $file2);
}
}
closedir($folder2);
sort($commcount, SORT_NUMERIC);
foreach ($commcount as $key) {
$key = 'comments/'.$key;
$file = file( $key );
$trenner = '<hr>';
$anzahl = count( explode( $trenner, $file[0] ) ) - 2; 
array_push($ausgabearray, $anzahl);
}
$auszugeben = array_sum($ausgabearray);
echo $auszugeben;

Damit lasse ich ihn das erste <hr> nicht mitzählen, alle weiteren ja und dann packe ich das in ein array und lasse es mit array_sum ausgeben.

So habe ich, vermutlich etwas umständlich, alle <hr>´s zählen und addieren lassen und das in allen in diesem Ordner verfügbaren Dateien. Als nächstes baue ich noch ein, dass er nur bestimmte Dateien ausliest, für den Fall, dass sich mal eine Datei da reinverirrt, die nicht dazugehört- was normalerweise allerdings nicht passiert sofern die nicht jemand manuell da rein packt.

Aber Danke für Eure Denkanstösse. Hat sehr geholfen.
 

Neue Beiträge

Zurück