[PHP-users 986] Re: 配列から要素を取り除くには
松嶋祥文
php-users@php.gr.jp
Tue, 31 Jul 2001 17:55:52 +0900
松嶋@ITBoost です。
こんにちわ。
| 配列から要素を取り除きたいのですが、スマートな方法がわかりません。
| 現在は、取り除きたい要素以外をすべてコピーするという方法を用いています。
PHP3 の場合は、組み込み関数一発というのは無いんじゃない
かとおもいます。私は思いつきませんでした。
ということで、メモリを節約したい(配列をコピーしたくない)
というのに重点を置いた関数を作成してみました。
配列(へのリファレンス)と削除したい要素の番号を渡します。
配列内で順番が変わっても良い場合と、ダメな場合の両方の
関数を挙げておきます。
あんまりスマートではないですが、PHP 内部のデータを直接
いじれない以上、論理的にこういうことをしないとダメなの
で仕方がないのではないかと思います。参考程度にどうぞ。
# こんなんで良かったでしょうか?
<?
// 順番が変わっても良いならこっち。
// (この場合連想配列にするという手もありでしょう)
function
removeElement(&$arr, $elem) {
if( count($arr) <= $elem || !count($arr) ) {
return false;
}
end($arr);
$arr[$elem] = current($arr);
unset($arr[count($arr)-1]);
return true;
}
// 順番がかわっちゃいけないならこっち。
function
removeElement2(&$arr, $elem) {
if( count($arr) <= $elem || !count($arr) ) {
return false;
}
for($i=$elem; $i<count($arr)-1; $i++) {
$arr[$i] = $arr[$i+1];
}
unset($arr[count($arr)-1]);
return true;
}
$arr = array("e0", "e1", "e2", "e3", "e4", "e5");
print "Size: " . count($arr) . "\n";
if( removeElement($arr, 2) ) {
print join(",", $arr) . "\n";
}
print "Size: " . count($arr) . "\n";
?>
--
,-------------+
+----------------------------------------------------' |
| 株式会社 IT Boost / アイティーブースト |
| 松嶋 祥文 [ mats@itboost.co.jp ] |
| http://www.itboost.co.jp/ |
| PHP, Perl, PostgreSQL, Apache, Java 他、いろいろあります。|
+-------------------------------------------------------------------+