質問
10要素のインデックス付き配列があり、要素を中央のどこかに配置するとします(たとえば、インデックス3)。次に、残りの配列をシフトして、11要素の長さにしたいです。これを行う簡単な方法はありますか?
put()
関数などがないことに驚いています。
array_splice
と array_merge
の組み合わせでこれを行うのは簡単だと思いますが、もっと簡単な方法があるかどうか疑問に思っていました。
解決
$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
)
おそらく、位置が配列よりも大きい場合、挿入が配列ではない場合など、チェックを追加できます。
所属していません StackOverflow