-6

PHP7.4 では、数値キーを使用して配列のインデックスを再作成する手法が新たに利用可能になりました。

これを「配列の再パッキング」または「スプラパッキング」のような楽しいものと呼ぶことにします。簡単なプロセスでは、splat 演算子 ( ...) ("spread operator" とも呼ばれます) を使用して配列をアンパックし、"対称配列破壊" によって新しい配列に第 1 レベルの要素を入力します。

比較コード: (デモ)

$array = [2 => 4, 5 => 3, "3" => null, -10.9 => 'foo'];

var_export(array_values($array));
var_export([...$array]);

両方が出力されます:

array (
  0 => 4,
  1 => 3,
  2 => NULL,
  3 => 'foo',
)

繰り返しになりますが、splat 演算子は数値キーを持つ配列に厳密に制限されています。これは、splat 演算子が他のものをチョークし、アンパックされた値を配列に直接書き込む機能が PHP7.4 以降でのみ利用できるためです。

予選の状況で同じ出力を提供する 2 つのテクニックでは、いつ一方を他方よりも使用する必要がありますか?

これはキーを再インデックスする方法ではなくarray_values()、新しく利用可能な手法との比較であることに注意してください。

これは次のものとは異なります。

配列のインデックスを再作成する方法を尋ねる他の数十の古いページ。

4

2 に答える 2

1

最初の要素が設定されていない 450,000 要素の配列のインデックスを再作成すると...

array_values() は、一貫して splatpacking の 2 倍高速です。

$array = range(0, 450000);
unset($array[0]);

ベンチマーク スクリプト

出力例:

Duration of array_values: 15.328378677368
Duration of splat-pack: 29.623107910156

パフォーマンスに関しては、常に使用する必要がありますarray_values()。これは、関数呼び出し手法が非関数呼び出し手法よりも効率的である場合の 1 つのケースです。


splatpacking テクニックが勝つ唯一のシナリオは、CodeGolfer の場合だと思います。13文字対 5 文字です。

于 2019-08-30T11:21:53.560 に答える