In diesem PHP Tutorial wird erklärt, wie Sie eine Anzahl von Zeichen vom Beginn einer Zeichenkette an zählt, bis ein Zeichen gefunden wird, das nicht in der zweiten Zeichenkette vorkommt. Es ist dabei egal, in welcher Reihenfolge die Zeichen in der zweiten Zeichenkette stehen. Dafür nutzten Sie die PHP-Funktion strspn().
Syntax:
strspn (string $zeichenkette_eins, string $zeichenkette_2, int $start, tint $laenge);
Beispiel 1:
<?php
/*
* Created on 16.12.2009 by Nico Schubert
*/
/**
* Beispiel 1 für die PHP-Funktion strspn()
*/
$zeichenkette_eins = 'allxcx';
$zeichenkette_zwei = 'Hallo';
echo strspn($zeichenkette_eins,
$zeichenkette_zwei);
?>
Ausgabe des Beispiel 1:
3
Erklärung:
Die ersten 3 Zeichen der Zeichenkette 1 „allxcx“ kommen auch in der Zeichenkette 2 „Hallo“ vor, also „all“. Das „x“ kommt dagegen in Zeichenkette 2 nicht vor. Die Länge des Abschnitts ist deshalb 3 (Zeichen), diese Zahl wird also zurückgegeben.
Seit PHP 4.3.0 sind zwei weitere optionale Parameter möglich: (start) und (laenge). Mit diesen Parametern lassen sich die Anfangsposition (start) und die Länge (laenge) des zu untersuchenden Zeichenkettenabschnitts bestimmen. Mit (start) wird also die genaue Anfangsstelle festgelegt, von der aus die Zeichenkette untersucht wird, und mit (laenge) die Länge des zu untersuchenden Zeichenkettenabschnitts.
Beispiel 2:
<?php
/*
* Created on 16.12.2009 by Nico Schubert
*/
/**
* Beispiel 2 für die PHP-Funktion strspn()
*/
$zeichenkette_eins = 'allxcx';
$zeichenkette_zwei = 'Hallo';
$start = '1';
$laenge = 10;
echo strspn($zeichenkette_eins,
$zeichenkette_zwei, $start, $laenge);
?>
Ausgabe für Beispiel 2:
2
Erklärung:
Es sind die gleichen Zeichenketten wie bei Beispiel 1, also „allxcx“ und „Hallo“. Die zu untersuchende Anfangsstelle wird mit „$start=1“ festgelegt, das heißt von „l“ an, da man bei 0 mit dem Zählen anfängt. Wäre „$start=0“, würde man mit „a“ bei „allxcx“ anfangen. Die Länge des zu untersuchenden Abschnitts ist mit „$laenge=10“ angegeben, sie umfasst also die ganze erste Zeichenkette. In Beispiel 2 sind also von Beginn der festgelegten Anfangsstelle an die 2 Zeichen „ll“ auch in Zeichenkette 2 vorhanden, das folgende „x“ dagegen nicht, deshalb wird die Zahl 2 zurückgegeben.
Beispiel3:
<?php
function meineFunktion($teilstring, $array)
{
return strspn($teilstring, implode($array));
}
$array = ["a", "g", "c", "d", "e", "f"];
echo meineFunktion("agcefghi", $array);
?>
Ausgabe:
6
Erklärung:
Der obige PHP-Code definiert eine Funktion namens meineFunktion, die zwei Parameter akzeptiert, nämlich einen Teilstring und ein Array. Die Funktion verwendet die strspn-Funktion, um die Länge des Teilstrings zu ermitteln, der aus den Zeichen des Arrays besteht. Anschließend wird der implode-Befehl verwendet, um die Elemente des Arrays in einen String zu konvertieren. Zuletzt wird die Länge des Teilstrings, der aus den Zeichen des Arrays besteht, als Rückgabewert der Funktion zurückgegeben.
Um die Funktion zu testen, wird zunächst ein Array mit den Zeichen a, g, c, d, e und f erstellt. Anschließend wird die Funktion mit dem Teilstring agcefghi und dem Array aufgerufen. Als Ergebnis wird die Länge des Teilstrings, der aus den Zeichen des Arrays besteht, ausgegeben.
Analyse von Textdateien: Zählen von Zeichen und Generierung von Statistiken
In diesem weiteren Beispiel wird gezeigt, wie Sie PHP verwenden können, um Textdateien zu analysieren, Zeichen zu zählen und statistische Informationen über die Verteilung der Anfangszeichen in den Zeilen zu generieren.
Beispiel 4:
<?php
/**
* Beispiel: Verwendung von strspn() zur Zeichenzählung am Anfang von Zeilen in einer Datei
**/
/**
* Zählt, wie oft die Anzahl der übereinstimmenden Zeichen am Anfang jeder Zeile einer Datei vorkommt.
*
* @param string $filename Der Name der Datei, die gelesen werden soll.
* @param array $characters Ein Array von Zeichen, nach denen am Anfang der Zeilen gesucht wird.
* @return array Ein assoziatives Array, das die Anzahl der Zeilen mit übereinstimmender Anfangszeichenanzahl enthält.
*/
function countCharactersInFile($filename, $characters) {
/** Ein Array, um die Zeichenzählung zu speichern */
$charCount = array();
/** Überprüfe, ob die Datei existiert */
if (!file_exists($filename)) {
echo "Die Datei '$filename' wurde nicht gefunden.\n";
return $charCount;
}
// Öffne die Datei im Lesemodus
$file = fopen($filename, "r");
if ($file) {
while (($line = fgets($file)) !== false) {
/**
* Verwende strspn(), um die Anzahl der
* übereinstimmenden Zeichen am Anfang zu zählen
* */
$lineCount = strspn($line, implode('', $characters));
// Aktualisiere die Zeichenzählung
if (array_key_exists($lineCount, $charCount)) {
$charCount[$lineCount]++;
} else {
$charCount[$lineCount] = 1;
}
}
fclose($file); // Schließe die Datei
}
return $charCount;
}
// Dateiname
$filename = "example.txt";
/** Zeichen, die gezählt werden sollen */
$characters = array('a', 'b', 'c');
$result = countCharactersInFile($filename, $characters);
if (!empty($result)) {
echo "Anzahl der Zeilen mit übereinstimmender Anfangszeichenanzahl in der Datei '$filename':\n";
foreach ($result as $count => $lineCount) {
echo "Zeilen mit $count übereinstimmenden Anfangszeichen: $lineCount\n";
}
}
?>
Erklärung:
In diesem PHP-Code-Beispiel wird eine Funktion namens countCharactersInFile() erstellt, um die Anzahl der Zeilen in einer gegebenen Datei zu zählen, bei denen die Anzahl der übereinstimmenden Zeichen am Anfang jeder Zeile mit den vorgegebenen Zeichen übereinstimmt. Die Funktion nimmt zwei Parameter an: den Dateinamen ($filename) und ein Array von Zeichen ($characters), nach denen am Anfang der Zeilen gesucht werden soll.
Der Hauptzweck dieser Funktion besteht darin, die Anzahl der Zeilen zu zählen, bei denen die ersten Zeichen mit den vorgegebenen Zeichen übereinstimmen. Dies wird mithilfe der Funktion strspn() erreicht, die die Länge des Anfangssegments einer Zeichenkette zurückgibt, das nur aus den angegebenen Zeichen besteht.
Die Funktion startet damit, zu überprüfen mit file_exists(), ob die angegebene Datei mit dem Namen $filename vorhanden ist. Wenn die Datei nicht gefunden wird, wird eine Meldung ausgegeben, die darauf hinweist, dass die Datei nicht gefunden wurde, und ein leeres assoziatives Array zurückgegeben. Andernfalls wird die Datei im Lesemodus geöffnet und in einem while-Schleifenkonstrukt wird jede Zeile der Datei nacheinander verarbeitet.
In der Schleife wird strspn() aufgerufen, um die Anzahl der übereinstimmenden Zeichen am Anfang der aktuellen Zeile zu zählen. Diese Anzahl wird in der Variablen $lineCount gespeichert. Anschließend wird der $lineCount-Wert als Schlüssel im assoziativen Array $charCount verwendet, um die Anzahl der Zeilen zu zählen, die diese spezifische Anzahl von übereinstimmenden Zeichen am Anfang aufweisen.
Das Ziel ist es, am Ende eine Zusammenfassung der Anzahl der Zeilen zu erhalten, die für jede Anfangszeichenanzahl relevant ist. Nachdem die Datei vollständig durchlaufen wurde, wird die Datei geschlossen und das assoziative Array $charCount zurückgegeben.
Abschließend wird das Ergebnis in einer foreach-Schleife durchlaufen und ausgegeben. Die Ausgabe zeigt die Anzahl der Zeilen mit übereinstimmender Anfangszeichenanzahl für jede Anzahl von übereinstimmenden Zeichen. Das Ergebnis wird nur dann angezeigt, wenn das assoziative Array $charCount nicht leer ist.
Diese Funktion bietet eine nützliche Möglichkeit, die Vorkommen bestimmter Anfangszeichenanzahlen in Zeilen einer Datei zu analysieren, und kann in verschiedenen Situationen, wie bei der Verarbeitung von Textdaten, nützlich sein.
Ablauf-Diagramm:
Erklärung:
Das Diagramm visualisiert den Ablauf eines Skripts zur Zeichenzählung am Anfang von Zeilen in einer Datei unter Verwendung der strspn()-Funktion:
- Der Prozess beginnt mit einem Startpunkt.
- Das Skript überprüft, ob die angegebene Datei existiert.
- Falls die Datei existiert, wird sie geöffnet.
- Die Zeilen in der Datei werden nacheinander gelesen.
- Für jede gelesene Zeile wird die strspn()-Funktion verwendet, um die Anzahl der übereinstimmenden Zeichen am Anfang der Zeile zu zählen.
- Wenn die Anzahl der übereinstimmenden Zeichen gezählt wurde, wird die Zeichenzählung aktualisiert.
- Nachdem die aktuelle Zeile verarbeitet wurde, wird zur nächsten Zeile übergegangen.
- Der Prozess setzt sich fort, bis alle Zeilen aus der Datei gelesen wurden.
- Nachdem alle Zeilen gelesen wurden, erfolgt die Ausgabe der Ergebnisse, die die Anzahl der Zeilen für jede Anfangszeichenanzahl zeigt.
Das Diagramm gibt den grundlegenden Ablauf des Skripts wieder, wenn es eine Datei öffnet, die Zeilen liest, die Anzahl der übereinstimmenden Anfangszeichen zählt und schließlich die Ergebnisse ausgibt.
Verstehen Sie die Einsatzmöglichkeiten der PHP-Funktion strspn()?
Die PHP-Funktion strspn() ist ein praktisches Werkzeug, um die Länge einer Zeichenkette zu bestimmen, die einem bestimmten Satz an Zeichen entspricht. Um mehr über die Funktion strspn() zu erfahren, stellen wir Ihnen im Folgenden zehn interessante Fragen:
- Was tut die PHP-Funktion strspn()?
- Die PHP-Funktion ermittelt die Anzahl der aufeinanderfolgenden Zeichen in einer Zeichenkette, die in einem angegebenen Satz angegeben sind. Sie wird häufig verwendet, um die Anzahl der aufeinanderfolgenden Zeichen in einer Zeichenkette zu ermitteln, die einen bestimmten Satz erfüllen.
- Wozu kann man die Funktion strspn() verwenden?
- Sie können die Funktion verwenden, um die Länge einer Zeichenkette zu bestimmen, die einem bestimmten Satz an Zeichen entspricht. Sie kann auch verwendet werden, um herauszufinden, ob eine Zeichenkette einem bestimmten Satz an Zeichen entspricht.
- Wie wird die Funktion strspn() aufgerufen?
- Die Funktion wird durch Aufrufen der Funktion mit drei Parametern aufgerufen. Der erste Parameter ist die Zeichenkette, die untersucht werden soll. Der zweite Parameter ist der Satz an Zeichen, nach denen gesucht wird. Der dritte Parameter ist optional und gibt an, ab welcher Position in der Zeichenkette die Suche beginnt.
- Was gibt die Funktion als Rückgabewert zurück?
- Die Funktion strspn() gibt als Rückgabewert die Anzahl der aneinanderfolgenden Zeichen zurück, die dem angegebenen Satz an Zeichen entsprechen.
- Kann man die Funktion strspn() mit mehreren Sätzen an Zeichen aufrufen?
- Ja, Sie können die Funktion mit mehreren Sätzen an Zeichen aufrufen, indem Sie mehrere Sätze als Parameter übergeben.
- Hat die Funktion strspn() eine Grenze in Bezug auf die Länge der Zeichenkette?
- Nein, die Funktion strspn() hat keine Grenze in Bezug auf die Länge der Zeichenkette.
- Kann man die Funktion strspn() dazu verwenden, herauszufinden, ob eine Zeichenkette ein bestimmtes Muster enthält?
- Ja, man kann die Funktion strspn() dazu verwenden, herauszufinden, ob eine Zeichenkette ein bestimmtes Muster enthält, indem man den Satz an Zeichen mit dem Muster übereinstimmt.
- Wie werden Leerzeichen bei der Verwendung der Funktion strspn() behandelt?
- Leerzeichen werden bei der Verwendung der Funktion strspn() als einzelnes Zeichen behandelt und in den Satz an Zeichen aufgenommen.
- Kann man die Funktion strspn() auch dazu verwenden, herauszufinden, ob eine Zeichenkette mit einem bestimmten Präfix beginnt?
- Ja, Sie können die Funktion dazu verwenden, um herauszufinden, ob eine Zeichenkette mit einem bestimmten Präfix beginnt, indem sie den Satz an Zeichen mit dem Präfix übereinstimmt.
- Kann man die Funktion auch dazu verwenden, herauszufinden, ob eine Zeichenkette ein bestimmtes Suffix enthält?
- Ja, die Funktion strspn() kann auch verwendet werden, um herauszufinden, ob eine Zeichenkette ein bestimmtes Suffix enthält. Die strspn()-Funktion in PHP gibt die Länge des Anfangssegments einer Zeichenkette zurück, das nur aus den angegebenen Zeichen besteht. Wenn Sie sie mit einem Suffix kombinieren, können Sie feststellen, ob das Suffix am Ende der Zeichenkette steht.
Hier ist ein Beispiel, wie Sie die Funktion verwenden können, um zu überprüfen, ob eine Zeichenkette ein bestimmtes Suffix enthält:
<?php
function endsWithSuffix($string, $suffix) {
$suffixLength = strlen($suffix);
$stringLength = strlen($string);
if ($suffixLength > $stringLength) {
/**
* Suffix ist länger als die Zeichenkette,
* kann also nicht am Ende stehen
* */
return false;
}
/**
* Verwende strspn(), um die Länge
* des gemeinsamen Anfangssegments zu ermitteln
* */
$commonLength = strspn(strrev($string), strrev($suffix));
/**
* Vergleiche die Länge mit der Suffixlänge
* */
return $commonLength === $suffixLength;
}
// Test
$string1 = "Hello, world!";
$suffix1 = "world!";
$string2 = "This is a test";
$suffix2 = "example";
if (endsWithSuffix($string1, $suffix1)) {
echo "Die Zeichenkette: ".$string1." enthält das Suffix: ".$suffix1.".\n";
} else {
echo "Die Zeichenkette: ".$string1." enthält nicht das Suffix: ".$suffix1.".\n";
}
if (endsWithSuffix($string2, $suffix2)) {
echo "Die Zeichenkette: ".$string2." enthält das Suffix: ".$suffix2.".\n";
} else {
echo "Die Zeichenkette: ".$string2." enthält nicht das Suffix: ".$suffix2.".\n";
}
?>
Ausgabe:
Die Zeichenkette: Hello, world! enthält das Suffix: world!.
Die Zeichenkette: This is a test enthält nicht das Suffix: example.