2009-03-06 11 views
0

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

put()機能や何かが驚いています。

array_splicearray_mergeの組み合わせでこれを行うのは簡単ですが、もっと簡単な方法があるかどうかは疑問でした。

答えて

11

array_splice() does this

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

ありがとう。これが私が尋ねた理由です(ドキュメントを読んでもあまり明白ではありません) – Andrew

2

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

1

現在のところ、これを処理できる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 
) 

、挿入ではありません配列など。

2

array_splice()を使用すると、PHPは引き続き配列の半分をコピーして挿入を行う必要があります。これは、大きな配列サイズではパフォーマンスが低下します。リストやツリーのデータ構造を代わりに使うべきでしょうか?

私が今までに配列の中央に挿入する必要があったのは、挿入の並べ替えとほぼ同じような操作をしていたときだけでした。並べ替えられていないアイテムを配列に格納し、それらをすべて追加したらソートしたいと思うかもしれません。

関連する問題