2016-08-26 2 views
0

Ich muss die Anzahl eines solchen Textarea Wert zählen. Dieser Textbereich könnte 5000 Zeichen enthalten. Aber ich muss nur wissen, ob die Anzahl dieser Zeichen mehr als 20 Zeichen beträgt oder nicht. Ich kann das tun, indem ich strlen() Funktion verwende. So etwas wie dieses:Wie kann die Anzahl der Textarea-Zeichen optimal gezählt werden?

$content = $_POST['textarea_content']; 
$content_length = mb_strlen($content, 'utf8'); 
if ($content_length > 20) { 
    // do stuff 
} 

Aber mein Ansatz ist überhaupt nicht zu optimieren. Er zählt die Anzahl aller Zeichen und vergleicht sie dann. Wie gesagt, manchmal gibt es viele Zeichen wie 5000 Zeichen. Gibt es einen Ansatz, die Zählung nach 20 Zeichen zu unterbrechen?

+0

Erklären Sie es bitte mit einem Beispiel? – ameenulla0007

+0

@ ameenulla0007 Schau, ich muss nur wissen * "Gibt es mehr als 20 Zeichen oder nicht?" *, Genau das. Ich muss nicht wissen, wie viele ganze Charaktere es gibt. Also * (zum Beispiel) * 5000 Zeichen zu zählen ist eine Verschwendung. – stack

+1

Ihr Ansatz ist in Ordnung. Ich habe schnell 'strlen()' mit einer 4m + Zeichen-Datei getestet, und es dauerte nur einen Bruchteil einer Sekunde, um die Zählung zu erhalten. Hast du gerade ein Problem mit deinem Zählen? – Drown

Antwort

1

Strings in PHP haben eine interne Variable, die die Länge der Zeichenfolge speichert, so dass die Laufzeit von strlen($str) nicht von der Länge der Zeichenfolge abhängt.

Ihr Problem ist, dass Sie mb_strlen verwenden möchten, um die Anzahl der Zeichen in der Zeichenfolge (und nicht die Anzahl der Bytes) zu erhalten. Mit anderen Worten: Sie möchten die Länge der Zeichenfolge wissen, auch wenn die Zeichenfolge Unicode-Zeichen enthält.

Wenn Sie wissen, dass Ihre Zeichenfolge UTF-8 ist, kann sie zur Optimierung verwendet werden. UTF-8 speichert maximal 4 Bytes pro Zeichen. Wenn Sie also isset($str[80]) verwenden, wissen Sie sicher, dass Ihre Zeichenfolge mindestens 20 Zeichen (und wahrscheinlich auch viel mehr) enthält. Wenn nicht, müssen Sie immer noch die mb_ Funktionen verwenden, um die benötigten Informationen zu erhalten. Der Grund für die Verwendung von isset anstelle von strlen ist, weil Sie nach dem optimierten Weg gefragt haben. Sie können mehr über die beiden in this question lesen.

Um es zusammenzufassen - Ihr optimierten Code wahrscheinlich wäre:

if (isset($str[80]) || mb_strlen(mb_substr($str, 0, 21, 'utf-8'), 'utf-8') > 20) { 
    .... 
} 

in PHP geschrieben, wird zuerst der Code den isset Teil überprüfen, und wenn es der andere Teil läuft nicht true zurück (so erhalten Sie die Optimierung hier sowohl von isset und die Tatsache, dass Sie die mb_ Funktionen nicht ausführen müssen).

Wenn Sie mehr Informationen über die Zeichen in der Zeichenfolge haben Sie es für weitere Optimierung (wenn zum Beispiel verwenden können, wissen Sie, dass Ihr alle die Zeichen in der Zeichenfolge aus dem unteren Bereich des UTF-8 sind, Sie müssen $str[80] nicht verwenden, könnte man genauso gut-$str[40] verwenden

Sie diese Tabelle aus wikipedia verwenden können. enter image description here

Zusammen mit den Informationen aus dem utf8-chartable website: enter image description here

Um die Anzahl der Bytes zu optimieren, die Sie möglicherweise für jedes Zeichen in Ihrer Zeichenfolge benötigen.

Verwandte Themen