通常の配列
Indexを指定して削除 : その1
array_splice();
- 配列を切り取る機能を利用して対象から値を削除する
- 1つだけの値の削除や連続する値の削除に向いている
切り取られた値 = array_splice(削除対象配列, 切り取り開始Index, 切り取り数);
array_splice使用例
$target = array('a', 'b', 'c');
//削除実行
$split = array_splice($target, 1, 1);
//削除結果
var_dump($target);/*array(2) { [0]=> string(1) "a" [1]=> string(1) "c" }*/
//引数で渡した値も変更されている
var_dump($split);/*array(1) { [0]=> string(1) "b" }*/
array_splice使用例2(連続した値の削除)
$target = array('a', 'b', 'c', 'd');
//削除実行
$split = array_splice($target, 1, 2);//連続した2つの値の削除
//削除結果
var_dump($target);/*array(2) { [0]=> string(1) "a" [1]=> string(1) "d" }*/
Indexを指定して削除 : その2
unset();
array_values();
- 配列を指定して、unsetで削除するやり方
- 複数の値の削除に向いている
- unsetで削除するだけでindexが変更されない。array_valuesでindexを詰める
indexを詰めるとは
$target = array('a', 'b', 'c');
//削除実行
unset($target[1]);
//実行結果
//indexの1を削除したため、indexが連番でなくなっている!
var_dump($target);/*array(2) { [0]=> string(1) "a" [2]=> string(1) "c" }*/
//indexを詰める
$target = array_values($target);
//indexの欠番が詰められて連番になった
var_dump($target);/*array(2) { [0]=> string(1) "a" [1]=> string(1) "c" }*/
unset使用例
$target = array('a', 'b', 'c', 'd');
foreach ($target as $key => $val) {
if(/*削除条件*/){
//削除実行
unset($target[$key]);
}
}
//Indexを詰める
array_values($target);
Indexを指定して削除のまとめ
1つ削除するだけなら、array_splice()が便利。
ただし、複数削除する場合にarray_splice()で削除を行うと、削除とIndexを詰める作業が同時に発生するため処理が重くなる。
unset();でまとめて削除した後に、array_valuesでIndexをすべて詰める方が処理が早くなる。
要素指定して配列を削除
array_diff();
array_values();
- index値ではなく、要素そのものを指定して値の削除を行う
- 削除後に、indexを詰める作業が必要
array_diffは第1引数の配列と第2引数以降の配列と比較し、 第1引数の要素の中で他の配列には存在しないものだけを返す。
array_diff使用例
$target = array('a', 'b', 'c', 'd', 'e');
//削除実行
$result = array_diff($target, array('c', 'e'));
//indexを詰める
$result = array_values($result);
//削除結果
var_dump($result);/*array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "d" }*/
連想配列
unset();
- keyを用いて連想配列から削除する
unset使用例
$target = array('key1' => 'a', 'key2' => 'b', 'key3' => 'c');
//削除実行
unset($target['key2']);
//削除結果
var_dump($target);/*array(2) { ["key1"]=> string(1) "a" ["key3"]=> string(1) "c" }*/