PHPで配列の先頭に項目を挿入する方法は?


167

私はそれを最後に挿入する方法を知っています:

$arr[] = $item;

しかし、それを最初に挿入する方法は?


2
$arr[-1] = $item;ここにあります:stackoverflow.com/a/15252657/669677

4
@ 2astalavista、それは機能しません:print_r($arr)=>Array ( [0] => a, [1] => b, [-1] => c )
laurent

@ returnthis.lau_この場合、-1から始まるforループを使用して機能させる必要がfor ($i = -1; $i < count($a)-1; $i++)あります。参照されたリンクが示すように、忘れがちなので、その解決策はこれ以上使いたくありません。

回答:


267

使用するarray_unshift($配列、$アイテム);

$arr = array('item2', 'item3', 'item4');
array_unshift($arr , 'item1');
print_r($arr);

あなたにあげます

Array
(
 [0] => item1
 [1] => item2
 [2] => item3
 [3] => item4
)

7
数値ではなくリテラルキーが必要な場合はどうでしょうか。
エヴァン

4
@Evan、ドキュメントにarray_unshiftは次のように書かれていますAll numerical array keys will be modified to start counting from zero while literal keys won't be touched.
2015

1
2つの問題があります:1)配列のインデックスを再作成する2)インデックスを持つアイテムを追加できない。
Nabi KAZ

2
連想配列がある場合、またはキーを保持する必要がある場合は、php.net / manual / en / function.array-unshift.phpのユーザー例を参照してください。これを行う方法の例がいくつかあります。
バリエ

112

配列キーを変更したくない連想配列または番号付き配列の場合:

$firstItem = array('foo' => 'bar');

$arr = $firstItem + $arr;

array_merge 常に配列のインデックスを再作成するため、機能しません。


6
これは確かにベストアンサーです!
Ankit

5
注意!"+演算子は、左側の配列に追加された右側の配列を返します。両方の配列に存在するキーの場合、左側の配列の要素が使用され、右側の配列の一致する要素は無視されました。」-参照:stackoverflow.com/a/2140094/3411766
cottton 2018

インデックス付きのアイテムを追加でき、配列のインデックスを再作成しなかったため、これは良い解決策です。ただし、左側の配列に同じインデックスがある場合は、右側の配列の項目の削除についてのメモを用意してください。
Nabi KAZ


6

文字列/カスタムインデックスキーを使用して、連想配列の先頭に項目を挿入します

<?php

$array = ['keyOne'=>'valueOne', 'keyTwo'=>'valueTwo'];

$array = array_reverse($array);

$array['newKey'] = 'newValue';

$array = array_reverse($array);

結果

[
  'newKey' => 'newValue',
  'keyOne' => 'valueOne',
  'keyTwo' => 'valueTwo'
]


4

array_unshift()を使用して、配列の最初の要素を挿入します。

ユーザーarray_shift()は、配列の最初の要素を削除します。


4

または、一時的な配列を使用して、サイクル中に変更したい場合は、実際の配列を削除できます。

$array = array(0 => 'a', 1 => 'b', 2 => 'c');
$temp_array = $array[1];

unset($array[1]);
array_unshift($array , $temp_array);

出力は次のようになります。

array(0 => 'b', 1 => 'a', 2 => 'c')

サイクル中にそれを行っているときは$temp_array、配列に項目を追加した後にクリーンアップする必要があります。


1

カスタムインデックスを使用:

$arr=array("a"=>"one", "b"=>"two");
    $arr=array("c"=>"three", "d"=>"four").$arr;

    print_r($arr);
    -------------------
    output:
    ----------------
    Array
    (
    [c]=["three"]
    [d]=["four"]
    [a]=["two"]
    [b]=["one"]
    )

1
このように配列を連結することはできません
バトルホーク

おそらく彼は、プラス(+)の代わりにコンマを使用するためのもの(。)
ErdinçÇorbacı

1

連想配列の場合、マージを使用できます。

$arr = array('item2', 'item3', 'item4');
$arr = array_merge(array('item1'), $arr)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.