LoginSignup
188
156

More than 5 years have passed since last update.

PHPで配列から特定の要素を削除する

Last updated at Posted at 2016-03-30

通常の配列

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" }*/
188
156
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
188
156