プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、配列から要素を削除する方法
PHPにて配列から要素を削除する方法です。
巷では「unset()」を使って

  unset($ary[1]);

みたいな方法がよく紹介されていますが
これだけだと説明が少々不親切(--)b

いやまぁ、分かってる人は良いんですけどね。
分からん人は処理内容によってはバグるよ。

結論から言うと「array_splice()」も
セットで覚えておきましょう(--)ノ

  array_splice($ary, 1, 1);

みたいにね。
理由と理屈はこんな感じφ(--)


まず前提として「PHPで扱う配列はすべて連想配列」です。
これ重要(--)b
※ついでにPHPの連想配列は並び順を保持します。

  $ary = array('a', 'b', 'c');

とか宣言した場合、これは

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

と同じ意味。
だから

  unset($ary[1]);

とか書くと「1 => 'b'」がいなくなる。

  //key未指定連想配列=配列
  $target = array('a', 'b', 'c');

  //処理前の値
  var_dump($target);

  //配列要素削除(unset)
  unset($target[1]);

  //処理後の値
  var_dump($target);


ってなコードを書くと結果はこんな感じφ(--)

  //処理前の値
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }

  //処理後の値
  array(2) {
    [0]=>
    string(1) "a"
    [2]=>
    string(1) "c"
  }


そーです、要素番号が飛んじゃうのです。
これをきちんと理解しておかないと

  $target = array('a', 'b', 'c');
  unset($target[1]);
  for($i = 0; $i < count($target); $i++){
      print $target[$i];
  }


とか書いちゃってバグる訳。
要素番号は詰めてくれないから「$target[1]」はありません。
これが微妙に鬱陶しい。
foreach()で回せって意見もごもっともですが
どーしてもfor文を使いたいときがあるんだい(><)

そんなときに助けてくれるのが「array_splice()」です。

  //key未指定連想配列=配列
  $target = array('a', 'b', 'c');

  //処理前の値
  var_dump($target);

  //配列要素削除(array_splice)
  array_splice($target, 1, 1);

  //処理後の値
  var_dump($target);


ってなコードを書くと結果はこんな感じφ(--)

  //処理前の値
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }

  //処理後の値
  array(2) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "c"
  }


「array_splice()」の詳しい説明はここでは省きますが
オフセットと長さ(要素数)を指定して
配列から要素を削除できる関数です。
他の要素に置き換えたりとかもできるみたいですが、
詳しいことはきちんと説明してるサイトで確認したって下さい(--)ノ

以上でございますm(__)m
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事