$string = "1,2,3"
$ids = explode(',', $string);
var_dump($ids);
kehrt zurück
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
}
Ich brauche, dass die Werte vom Typ int statt vom Typ string sind. Gibt es eine bessere Möglichkeit, dies zu tun, als das Array mit einem foreach zu durchlaufen und jeden String in int zu konvertieren?
Das ist fast 3 - mal schneller als
explode()
,array_map()
undintval()
:quelle
Daher war ich neugierig auf die Leistung einiger der in den Antworten genannten Methoden für eine große Anzahl von Ganzzahlen.
Vorbereitung
Ich habe nur ein Array von 1 Million zufälligen Ganzzahlen zwischen 0 und 100 erstellt. Dann habe ich sie implodiert, um die Zeichenfolge zu erhalten.
Methode 1
Dies ist der einzige Liner aus Marks Antwort:
Methode 2
Dies ist der JSON-Ansatz:
Methode 3
Ich habe mir diese als Modifikation von Marks Antwort ausgedacht. Dies verwendet immer noch die
explode()
Funktion, aber anstatt aufzurufen, verwendearray_map()
ich eine reguläreforeach
Schleife, um die Arbeit zu erledigen und den Overhead zu vermeidenarray_map()
. Ich analysiere auch mit(int)
vsintval()
, aber ich habe beide ausprobiert, und es gibt keinen großen Unterschied in Bezug auf die Leistung.Ergebnisse:
Das Endergebnis ist der Durchschnitt. Es sieht so aus, als ob die erste Methode für 1 Million Ganzzahlen etwas langsamer war, aber ich habe keinen dreifachen Leistungsgewinn von Methode 2 bemerkt, wie in der Antwort angegeben. Es stellte sich heraus, dass die
foreach
Schleife in meinem Fall die schnellste war. Ich habe das Benchmarking mit Xdebug durchgeführt.Bearbeiten: Es ist eine Weile her, seit die Antwort ursprünglich veröffentlicht wurde. Zur Verdeutlichung wurde der Benchmark in PHP 5.6 durchgeführt.
quelle
array_map(function($v){ return (int)$v; }, $strings_array);
das habe ich gemeintVerwenden Sie diesen Code mit einem Abschluss (eingeführt in
PHP 5.3
), er ist etwas schneller als die akzeptierte Antwort und für mich ist die Absicht, ihn in eine Ganzzahl umzuwandeln, klarer:Ausgabe wird sein:
quelle
In Marks Lösung kehren Sie zurück,
array([0]=> int 0)
wenn Sie versuchen, eine Zeichenfolge wie "test" zu analysieren.quelle
Sie sind sich nicht sicher, ob dies schneller ist, aber wenn Sie das Array zweimal umdrehen, werden numerische Zeichenfolgen in Ganzzahlen umgewandelt:
quelle
Eine alternative kürzere Methode könnte sein:
Es hat die gleiche Leistung wie Methode 3.
quelle
Wenn Sie ein Array haben wie:
Und wenn Sie sie in Ganzzahlen umwandeln und innerhalb des Arrays bleiben möchten, sollten Sie Folgendes tun:
quelle
Meine Lösung besteht darin, jeden Wert mithilfe der Rückruffunktion umzuwandeln:
quelle
Halte es einfach...
Warum suchst du nach anderen Wegen? Looping macht den Job ohne Schmerzen. Wenn Leistung Ihr Anliegen ist, können Sie mit gehen
json_decode ()
. Die Leute haben geschrieben, wie man das benutzt, deshalb füge ich es hier nicht ein.Hinweis: Wenn Sie den Operator == anstelle von === verwenden, werden Ihre Zeichenfolgenwerte automatisch in Zahlen (z. B. Ganzzahl oder Doppel) konvertiert, wenn sie eine gültige Zahl ohne Anführungszeichen bilden. Beispielsweise:
Somit kann == Ihr Problem lösen, ist effizient, bricht jedoch ab, wenn Sie === in Vergleichen verwenden.
quelle
Wenn Sie ein mehrdimensionales Array haben, funktioniert keine der zuvor genannten Lösungen. Hier ist meine Lösung:
Dann machen Sie einfach Folgendes:
Dadurch wird ein Array wie folgt erstellt:
sieht aus wie das:
(Dies funktioniert mit jeder Tiefe)
quelle
Sie können Werte im Array konvertieren:
Sie können auch den Rückgabewert der
explode
Funktion an zurückgeben$strings
und iterieren, anstatt eine andere Variable ($ ids) zu verwenden.Ich denke, diese Lösung ist der sicherste Weg mit der besten Leistung.
quelle
PHP 7.4 Stil:
quelle
Eingabe => '["3", "6", "16", "120"]'
Typkonvertierung, die ich verwendet habe => (int) $ s;
Ausgabe:
Vielen Dank
quelle