Per arrivare a una risposta, è necessario impostare un banco di prova di riferimento. Confronta tutti i metodi su più iterazioni (centinaia di migliaia o milioni) su una casella inattiva. Prova la funzione microtime integrata per misurare la differenza tra inizio e fine. Questo è il tuo tempo trascorso.
Il test dovrebbe richiedere tutti i 2 minuti per scrivere.
Per risparmiarti qualche sforzo, ho scritto un test. Il mio test mostra che la soluzione funzionale (substr) è MOLTO più lenta (attesa). La soluzione idiomatic PHP ({}) è veloce quanto il metodo index. Sono intercambiabili. Il ([]) è preferito, in quanto questa è la direzione in cui PHP sta andando per quanto riguarda gli offset delle stringhe.
<?php
$string = 'abcd';
$limit = 1000000;
$r = array(); // results
// PHP idiomatic string index method
$s = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
$c = $string{2};
}
$r[] = microtime(true) - $s;
echo "\n";
// PHP functional solution
$s = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
$c = substr($string, 2, 1);
}
$r[] = microtime(true) - $s;
echo "\n";
// index method
$s = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
$c = $string[2];
}
$r[] = microtime(true) - $s;
echo "\n";
// RESULTS
foreach ($r as $i => $v) {
echo "RESULT ($i): $v \n";
}
?>
Risultati:
RISULTATO (PHP4 & 5 bretelle idiomatiche sintassi): ,19106006622314
RISULTATO (stringa funzione Slice): ,50699090957642
RISULTATO (* sintassi index, il futuro come il le parentesi sono deprecate *): 0.19102001190186
'$ stringa [2]' o '$ stringa {2}' deve essere identico in velocità e consumo di memoria ed e entrambi dovrebbero essere più veloci di substr. – anubhava