PHP array di indicizzazione:$array[$indice] vs $array[“$indice”] vs $array[“{$index}”]

StackOverflow https://stackoverflow.com/questions/6628

  •  08-06-2019
  •  | 
  •  

Domanda

Qual è la differenza, se esiste, tra questi metodi di indicizzazione in un array PHP:

$array[$index]
$array["$index"]
$array["{$index}"]

Mi interessa sia le prestazioni e le differenze funzionali.

Aggiornamento:

(In risposta a @Jeremy) non sono sicuro che è di destra.Ho eseguito questo codice:

  $array = array(100, 200, 300);
  print_r($array);
  $idx = 0;
  $array[$idx] = 123;
  print_r($array);
  $array["$idx"] = 456;
  print_r($array);
  $array["{$idx}"] = 789;
  print_r($array);

E ottenuto questo output:

Array
(
    [0] => 100
    [1] => 200
    [2] => 300
)

Array
(
    [0] => 123
    [1] => 200
    [2] => 300
)

Array
(
    [0] => 456
    [1] => 200
    [2] => 300
)

Array
(
    [0] => 789
    [1] => 200
    [2] => 300
)
È stato utile?

Soluzione

vedi @svec e @jeremy sopra.Tutti indici di un array sono di tipo 'int' prima, quindi di tipo 'string', e sarà il cast che come PHP vede in forma.

Prestazioni saggio, $indice dovrebbe essere più veloce "$index" e "{$index}" (che sono le stesse).

Una volta che si avvia una virgoletta doppia stringa PHP andrà in modalità di interpolazione e di trattarlo come una stringa di prima, ma cercando variabile marcatori ($, {}, ecc) per sostituire dall'ambito locale.Questo è il motivo per cui nella maggior parte delle discussioni, vero 'statico', stringhe devono essere sempre apici meno che non avete bisogno di fuga-scorciatoie come " " o " ", perché PHP non è necessario provare per interpolare la stringa in fase di esecuzione e la stringa può essere compilato staticamente.

In questo caso, doublequoting sarà la prima copia $indice nella stringa, quindi restituisce la stringa direttamente utilizzando $indice di restituire la stringa.

Altri suggerimenti

Ho cronometrato il 3 modi di utilizzo di un indice di simile a questo:

for ($ii = 0; $ii < 1000000; $ii++) {
   // TEST 1
   $array[$idx] = $ii;
   // TEST 2
   $array["$idx"] = $ii;
   // TEST 3
   $array["{$idx}"] = $ii;
}

La prima serie di test utilizzati $idx=0, il secondo set usato $idx="0", e il terzo set usato $idx="blah".Il cronometraggio è stato fatto utilizzando microtime() diff.Sto usando WinXP, PHP 5.2, Apache 2.2, e Vim.:-)

Ed ecco i risultati:

Utilizzando $idx = 0

$array[$idx]            // time: 0.45435905456543 seconds
$array["$idx"]          // time: 1.0537171363831 seconds
$array["{$idx}"]        // time: 1.0621709823608 seconds
ratio "$idx" / $idx     // 2.3191287282497
ratio "{$idx}" / $idx   // 2.3377348193858

Utilizzando $idx = "0"

$array[$idx]            // time: 0.5107250213623 seconds
$array["$idx"]          // time: 0.77445602416992 seconds
$array["{$idx}"]        // time: 0.77329802513123 seconds
ratio "$idx" / $idx     // = 1.5163855142717
ratio "{$idx}" / $idx   // = 1.5141181512285

Utilizzando $idx = "blah"

$array[$idx]           // time: 0.48077392578125 seconds
$array["$idx"]         // time: 0.73676419258118 seconds
$array["{$idx}"]       // time: 0.71499705314636 seconds
ratio "$idx" / $idx    // = 1.5324545551923
ratio "{$idx}" / $idx  // = 1.4871793473086

Così $array[$idx] è il mani-down vincitore del concorso di esecuzione, almeno sulla mia macchina.(I risultati sono stati molto ripetibile, BTW, l'ho fatto 3 o 4 volte e ha ottenuto gli stessi risultati.)

Credo che da una performance prospettiva che $array["$indice] è più veloce di $array[$indice] Vedi Meglio pratiche per ottimizzare il codice PHP prestazioni

Non credere a tutto quello che leggi così alla cieca...Penso che hai frainteso quello.L'articolo dice $array['indice'] è più veloce di $array[indice] cui si indice una string, non una variabile.Perché se non avvolgere in citazioni PHP cerca un costante var e non riesci a trovare uno, così si presuppone che si intende per rendere una stringa.

Quando i diversi metodi di indicizzazione risolvere diversi indici?

Secondo http://php.net/types.array, un indice di un array può solo essere un intero o una stringa.Se si tenta di utilizzare un galleggiante come un indice, si troncano per intero.Quindi, se $index è un galleggiante con il valore 3.14, quindi $array[$index] valuterà per $array[3] e $array["$index"] valuterà per $array['3.14'].Qui è un po ' di codice che lo conferma:

$array = array(3.14 => 'float', '3.14' => 'string');
print_r($array);

$index = 3.14;
echo $array[$index]."\n";
echo $array["$index"]."\n";

L'output:

Array([3] => float [3.14] => string)
float
string

Risposta dell'Aggiornamento:

Oh, hai ragione, credo che PHP è necessario convertire indice di un array di stringhe in numeri se contengono solo cifre.Ho provato questo codice:

$array = array('1' => 100, '2' => 200, 1 => 300, 2 => 400);
print_r($array);

E l'output è:

Array([1] => 300 [2] => 400)

Ho fatto alcuni test e ha scoperto che se un indice di un array (o chiave) è fatta solo di cifre, è sempre convertito in un numero intero, altrimenti si tratta di una stringa.

ejunker:

Puoi spiegare perché è più veloce?Non ci vuole l'interprete di un ulteriore passaggio per analizzare "$indice" nella stringa da utilizzare come un indice invece di utilizzare solo $indice di indice?

Se $indice è una stringa non c'è differenza, perché $indice, "$index" e "{$index}" tutti valutare per la stessa stringa.Se $indice è un numero, per esempio 10, la prima linea di valutare a $array[10] e le altre due linee di valutare a $array["10"], che è un elemento di $array[10].

Credo che da un punto di vista delle prestazioni che $array["$indice] è più veloce di $array[$indice] Vedere Best practice per ottimizzare le prestazioni del codice PHP

Un'altra variante che io uso a volte quando ho un array all'interno di una stringa è:

$str = "this is my string {$array["$index"]}";

Edit:Quello che intendevo dire è di $row[’id’] è più veloce di $row[id]

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top