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.
Zusammen mit den Informationen aus dem utf8-chartable website:
Um die Anzahl der Bytes zu optimieren, die Sie möglicherweise für jedes Zeichen in Ihrer Zeichenfolge benötigen.
Erklären Sie es bitte mit einem Beispiel? – ameenulla0007
@ 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
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