PHP-Consulting.de

Über PHP und Consulting

String-Performance: Konkatenieren (Punkt) vs. implodieren

Das performanteste um einen String zu bilden scheint mir der ordinäre Punkt-Parameter zu sein. Zwar hatte ich gelesen, implodieren von Arrays wäre schneller, sehe ich aber nicht:

<?php
$t = microtime( true);
for ($i = 1; $i <= 1000; $i++) {
    $b = 'foo'.'bar'.'foo'.'bar'.'foo'.'bar'.'foo';
}
echo "Punkt:   ".(microtime( true) - $t).PHP_EOL;

$t = microtime( true);
for ($i = 1; $i <= 1000; $i++) {
    $b = implode(array( 'foo','bar','foo','bar','foo','bar','foo'));
}
echo "Implode: ".(microtime( true) - $t).PHP_EOL;

$t = microtime( true);
for ($i = 1; $i <= 1000; $i++) {
    $b = sprintf( '%s%s%s%s%s%s', 'foo','bar','foo','bar','foo','bar','foo');
}
echo "Sprintf: ".(microtime( true) - $t).PHP_EOL;
?>
Punkt:   0.0010280609130859
Implode: 0.0029480457305908
Sprintf: 0.0025858879089355

Ist ja recht eindeutig. Sprintf wurde auch manchmal erwähnt, ist zwar noch etwas schneller als das implodieren, persönlich finde ich es aber unleserlich.

Mich hat es schon immer etwas gewundert das es so einen schönen, wunderbar einfachen, Punkt-Operator gibt, den man dann aus nicht verwenden soll. In Java ist das aus Performance-Sicht wohl so (dort natürlich + statt . als Operator). Hängt vermutlich damit zusammen das dort normale Strings eine fixe länge haben. Das kennt PHP ja erst gar nicht.

Leave a Reply