PHPの配列インデックス:$配列[$インデックス]vs$配列["$指数"]vs$配列["{$指}"]

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

  •  08-06-2019
  •  | 
  •  

質問

何か違いはあるが、これらの方法の指数付けにPHPの配列:

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

私は両方の機能ます。

更新:

(反@Jeremy)なんなのかそうです。を行ったこのコード:

  $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);

からこの出力:

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
)
役に立ちましたか?

解決

見@svecと@jeremyます。すべての配列を指型'int'最初に、そしてタイプ'文字列'、キャストとして、PHPのとします。

性能的$指すべきよりも早く"$インデックス"と"{$指}"となるものとします。.

始めてダブル-引用文字列、PHPのうち補間モードと文字列が見つ可変のマーカー($,{}等)に置き換えるからです。そのほとんど議論では、true'static'の文字列は、常に単一引用符ない限り、必要にエスケープ-ショートカットのように" "と" "、PHPな配慮を必要とするみを補完する文字列の実行時の文字列で作成静的.

この場合、doublequotingまずコピーのインデックスに文字列、文字列を返しますが、直接$指数だけを返し文字列です。

他のヒント

Iタイムには3つの指標のようになります:

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

最初の試験に使用 $idx=0, 第二セット使用 $idx="0", の設定を使用 $idx="blah".タイミングを使用した microtime() 負荷を.を使用していWinXP,PHP5.2では、Apache2.2で、Vim.:-)

この結果:

を使用 $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

を使用 $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

を使用 $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

なので $array[$idx] 手下の性能を競争の少なくとも私の機です。(この結果は非常に再現性、余談ですが、行ったこの3倍から4倍近くにも同じ結果になります。

と思うから性能 な視点$配列["$インデックス"】 よ$配列[$インデックス]イベント 実務の最適化PHPコード 性能

ということなのかまで突き詰め...思いますの誤解を受けます。にしているのだろう、というのは$配列['index']よりはるかに高$配列に[インデックス]が指数 文字列, ではなく、可変となります。そうでない場合はそれを包みこむ引用符で囲むPHP見のための定数varけないので見つけようと仮定しまうので文字列になります。

の異なるインデクシング手法の解決に異なるインデックス?

による http://php.net/types.array, では、配列インデックスできるの整数または文字列です。場合によってfloatとして、インデックスでは切り捨て整数値です。い場合 $index はfloatの値をfig.3.14に示したとおり、その $array[$index] を評価する $array[3]$array["$index"] を評価する $array['3.14'].ここでは一部のコードがあることを確認するためこ

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

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

出力:

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

への対応更新

ああ、そうかもしれませんかPHP転換しなければならな配列インデックスの文字列を数字が含まれている場合は、だけできるようにしました。またこのコード:

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

出力した:

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

しっかり試験、その場合は配列インデックス、アプリケーション)は、限桁の数字では常に整数に変換され、そうでない場合は、文字列になります。

ejunker:

理由は何ですかそれが早い?なので、通訳に追加ステップ解析"$インデックス"を使用する文字列を指標としてだけでなくル指数を表す指標として?

ば$指数が文字列の違いはありませんので$指数"$指数"、"{$指}"すべての評価を同じ文字列になります。ば$指数が多く、例えば10年、最初の行を$配列[10]にラインを$配列["10"は、異なる要素ド配列[10].

私は性能面と$配列["$インデックス""がより速$配列[$指数ライブラリ]ライブラリを参照 カスタマーサポートまで最適な性能PHPコード

もう一つの変化が使う時にいただいた場合、配列内の文字列は:

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

編集:てもらえてはいなかったようであ$row['id']よりも早く行は、[id]

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top