配列要素を削除するにはさまざまな方法があり、特定のタスクには他のタスクよりも役立つものがあります。
配列要素を1つだけ削除する場合は、 unset()
または\array_splice()
を使用できます。
値がわかっていて、要素を削除するためのキーがわからない場合は、 \array_search()
を使用してキーを取得できます。 \array_search
は最初のヒットのみを返すため、これは要素が複数回出現しない場合にのみ機能します。
unset()
unset()
、配列キーは変更されないことに注意してください。 あなたがキーのインデックスを再作成したい場合は、使用することができます\array_values()
の後にunset()
0から始まる数値的に列挙されたキーにすべてのキーを変えるであろう。
コード:
$array = [0 => "a", 1 => "b", 2 => "c"];
unset($array[1]);
// ↑ Key which you want to delete
出力:
[
[0] => a
[2] => c
]
\array_splice()
メソッド\array_splice()
使用すると、キーのインデックスが自動的に再作成されますが、すべてのキーを数値キーに変換する\array_values()
とは対照的に、関連付けキーは変更されません。
\array_splice()
は、2番目のパラメーターとして、キーではなくオフセットを必要とします。
コード:
$array = [0 => "a", 1 => "b", 2 => "c"];
\array_splice($array, 1, 1);
// ↑ Offset which you want to delete
出力:
[
[0] => a
[1] => c
]
array_splice()
、 unset()
と同じで、参照によって配列を取得します。 これらの関数の戻り値を配列に割り当てることはありません。
複数の配列要素を削除し、 unset()
または\array_splice()
複数回呼び出したくない場合は、関数\array_diff()
または\array_diff_key()
使用できます。削除する要素の値またはキーを知っているかどうか。
\array_diff()
メソッド削除する配列要素の値がわかっている場合は、 \array_diff()
使用できます。 以前のunset()
と同様に、配列のキーは変更されません。
コード:
$array = [0 => "a", 1 => "b", 2 => "c", 3 => "c"];
$array = \array_diff($array, ["a", "c"]);
// └────────┘
// Array values which you want to delete
出力:
[
[1] => b
]
\array_diff_key()
メソッド削除する要素のキーがわかっている場合は、 \array_diff_key()
を使用します。 キーを値としてではなく、2番目のパラメーターのキーとして渡すようにする必要があります。 キーはインデックスを再作成しません。
コード:
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_diff_key($array, [0 => "xy", "2" => "xy"]);
// ↑ ↑
// Array keys which you want to delete
出力:
[
[1] => b
]
unset()
または\array_splice()
を使用して同じ値の複数の要素を削除する場合は、 \array_keys()
を使用して特定の値のすべてのキーを取得してから、すべての要素を削除できます。
unset()
はインデックスを変更せずに保持することに注意してください。これは、文字列インデックス(ハッシュテーブルとしての配列)を使用する場合に期待されることですが、整数のインデックス付き配列を扱う場合は非常に驚く可能性があります。
$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[3]=>
int(3)
} */
$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)
} */
したがって、整数キーを正規化したい場合は、 array_splice()
を使用できます。 別のオプションは、 array_values()
後にunset()
です。
$array = array(0, 1, 2, 3);
unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)
} */
// Our initial array
$arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");
print_r($arr);
// Remove the elements who's values are yellow or red
$arr = array_diff($arr, array("yellow", "red"));
print_r($arr);
これは上記のコードからの出力です:
Array
(
[0] => blue
[1] => green
[2] => red
[3] => yellow
[4] => green
[5] => orange
[6] => yellow
[7] => indigo
[8] => red
)
Array
(
[0] => blue
[1] => green
[4] => green
[5] => orange
[7] => indigo
)
これで、array_values()は数値配列のインデックスを適切に再作成しますが、配列からすべてのキー文字列を削除し、それらを数値に置き換えます。 キー名(文字列)を保持する必要がある場合、またはすべてのキーが数値の場合は配列のインデックスを再作成する必要がある場合は、array_merge()を使用します。
$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);
出力
Array
(
[0] => blue
[1] => green
[2] => green
[3] => orange
[4] => indigo
)
$key = array_search($needle, $array);
if ($key !== false) {
unset($array[$key]);
}
unset($array[$index]);
また、名前付き要素の場合:
unset($array["elementName"]);
すべての値が一意である(または一意ではないが特定の値のすべてのインスタンスを削除したい)数値インデックス付き配列がある場合は、array_diff()を使用して、次のように一致する要素を削除できます。
$my_array = array_diff($my_array, array('Value_to_remove'));
例えば:
$my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
echo sizeof($my_array) . "\n";
$my_array = array_diff($my_array, array('Charles'));
echo sizeof($my_array);
これにより、次が表示されます。
4
3
この例では、値が「Charles」の要素が削除されます。これは、初期配列のサイズが4、削除後に3のサイズを報告するsizeof()呼び出しで確認できます。
<?php
$stack = ["fruit1", "fruit2", "fruit3", "fruit4"];
$fruit = array_shift($stack);
print_r($stack);
echo $fruit;
?>
出力:
[
[0] => fruit2
[1] => fruit3
[2] => fruit4
]
fruit1
配列の単一の要素を破棄します
unset()
$array1 = array('A', 'B', 'C', 'D', 'E');
unset($array1[2]); // Delete known index(2) value from array
var_dump($array1);
出力は次のようになります。
array(4) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[3]=>
string(1) "D"
[4]=>
string(1) "E"
}
配列のインデックスを再作成する必要がある場合:
$array1 = array_values($array1);
var_dump($array1);
その場合、出力は次のようになります。
array(4) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
string(1) "D"
[3]=>
string(1) "E"
}
配列の最後から要素をポップします-削除された要素の値を返します
mixed array_pop(array &$array)
$stack = array("orange", "banana", "apple", "raspberry");
$last_fruit = array_pop($stack);
print_r($stack);
print_r('Last Fruit:'.$last_fruit); // Last element of the array
出力は次のようになります
Array
(
[0] => orange
[1] => banana
[2] => apple
)
Last Fruit: raspberry
配列から最初の要素(赤)を削除します-削除された要素の値を返します
mixed array_shift ( array &$array )
$color = array("a" => "red", "b" => "green" , "c" => "blue");
$first_color = array_shift($color);
print_r ($color);
print_r ('First Color: '.$first_color);
出力は次のようになります。
Array
(
[b] => green
[c] => blue
)
First Color: red
検索を避けるために、 array_diff
遊ぶことができます:
$array = array(3, 9, 11, 20);
$array = array_diff($array, array(11) ); // removes 11
この場合、キーを検索/使用する必要はありません。