php note



 

PHP Note(トップページ) > 02.基本的な関数 > 05.配列処理 > 配列を削除する関数(unset , array_pop , array_slice)







[Note] 配列を削除する関数(unset , array_pop , array_slice)

配列に格納したデータを削除する場合に、どうやろうかと迷う方が多いのではないかと思います。これは、複数の関数とその特徴とよく見極めていると簡単かもしれません。
配列の1要素を削除するには「unset」関数ではないかと思います。また、配列の多くの要素を削除するには「array_slice」関数ではないかと思います。
まず、はじめに紹介するのは「unset」関数です。これはご存知の方も多いかとおもいますが、そもそも「変数」を削除する関数ですが、配列の1要素も削除することができます。

<?php

$data = array(’name’ => ‘yamada’ , ‘mail’ => ‘yamada@test.com’);
unset($data['name']);
print_r($data);

?>

上記のようにすれば、実行結果は以下のようにキーがnameの配列要素が削除されるはずです。

Array( [mail] => yamada@test.com)

また、配列の削除のための関数「array_pop」も用意されていますが、しかしながら、この関数は配列の末尾を削除するという非常に限定的な機能しか有していません。

<?php

$data = array(’no.1′,’no.2′,’no.3′);
array_pop($array);
print_r($data);

?>

上記の結果は、以下のようになります。

Array ( [0] => no.1 [1] => no.2)

ので、配列の削除として常用するのには、いささか不思議な感じがします。
この「array_pop」関数は、「戻り値」としても最後の配列要素を返しますので
おそらく以下のようにのフルパスのファイル名から、ディレクトリ名を削除してファイル名のみ取り出すなどに使用するのが本筋ではないかと考えられます。

<?php

$filename = “/usr/local/bin/test.sh”;
$data = explode(”/” , $filename); → 上記のフルパスのファイル名を「/」で分解し配列に格納
echo array_pop($data); → 配列($data)の最後の要素を「戻り値」として出力

?>

実行結果は当然ながら、以下のようになります。

test.sh

さて、本題に戻りまして、配列の削除ですが、配列要素の多くを削除したい場合は、「unset」関数をループでまわして、場合によっては条件分岐をさせるという方法がシンプルだと思います。
しかしながら、条件が非常に単純な場合は、「array_slice」関数というものが用意されています。

<?php

$data = array(’test001′,’test002′,’test003′,’test004′,’test005′);
array_splice($data, 2);
print_r($data);

?>

上記の実行結果は、以下のようになります。

Array ( [0] => test001 [1] => test002 )

もし、要素数が100の配列で末尾20個を削除したい場合は、array_splice($data, 80); のようにします。

また、要素数を指定する方向は、以下のようにマイナスの値を指定するこごで逆にすることが可能です。

<?php

$test_data = array(’test001′, ‘test002′, ‘test003′, ‘test004′, ‘test005′);
array_splice($test_data, 1, -1);
print_r($test_data);

?>

上記の結果は、以下のようになります。

Array ( [0] => test001 [1] => test005)

これは、第1要素からマイナス1進んだところまでの値を残して削除しています。

また、配列の要素数が未知の場合、以下のように「count」関数で配列の要素数をカウントして反映させることも可能です。

<?php

$count_data = array(’test001′, ‘test002′, ‘test003′, ‘test004′, ‘test005′);
array_splice($count_data, 1, count($count_data)-1);
print_r($count_data);

?>

実行結果は以下のようになります。

Array ([0] => test001 [1] => test002 [2] => test003 [3] => test004)







[ カテゴリ一覧 ]

 |  01.基本構文  |  02.基本的な関数  |