PHP配列の中央に要素を配置する簡単な方法は何ですか?

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

  •  05-07-2019
  •  | 
  •  

質問

10要素のインデックス付き配列があり、要素を中央のどこかに配置するとします(たとえば、インデックス3)。次に、残りの配列をシフトして、11要素の長さにしたいです。これを行う簡単な方法はありますか?

put()関数などがないことに驚いています。

array_splice array_merge の組み合わせでこれを行うのは簡単だと思いますが、もっと簡単な方法があるかどうか疑問に思っていました。

役に立ちましたか?

解決

array_splice()がこれを行います

$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green", "blue", "purple", "yellow");

他のヒント

残念ながら、あなたの最善の策はあなたがあなたの投稿で説明したものです。

array_splice()を使用する場合、PHPは挿入を行うために配列の半分をコピーする必要があります。これは、配列サイズが大きい場合にパフォーマンスに影響します。代わりにリストまたはツリーのデータ構造を使用する必要がありますか?

配列の中央に挿入する必要があったのは、挿入ソートとほぼ同様の操作を行っていたときだけでした。配列に並べ替えられていないアイテムを保存し、それらをすべて追加した後に並べ替えることができますか?

現在、これを処理できるPHP関数はありません。ただし、自分で作成するのはそれほど難しくありません:

function array_insert(&$array, $insert, $position) {
    $c = count($array);
    $slice = array_merge($insert, array_slice($array, $position));
    array_splice($array, $position, $c, $slice);
}

$array = array('a','b','d','e');
print_r($array);
array_insert($array, array('c'), 2);
print_r($array);

結果は次のとおりです:

Array
(
    [0] => a
    [1] => b
    [2] => d
    [3] => e
)
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
)

おそらく、位置が配列よりも大きい場合、挿入が配列ではない場合など、チェックを追加できます。

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