[PHP-users 1020] Re: 配列から要素を取り除くには
松嶋祥文
php-users@php.gr.jp
Thu, 02 Aug 2001 11:24:53 +0900
松嶋@ITBoost です。
(一部改行位置変更しています)
| 前々から疑問だったのですが、PHP の array では、添え字というよりもキーなんで
| すよね?
そうかもしれません。
<?
$arr[0] = "a";
$arr[1] = "b";
$arr[2] = "c";
print join(",", $arr);
?>
というプログラムと
<?
$arr[0] = "a";
$arr[2] = "c";
$arr[1] = "b";
print join(",", $arr);
?>
は結果が異なります。
(代入の順序が異なるだけです)
# Perl で同等のことをすると結果は同じになります。
| そのため、たとえば、今回のようにある要素を削ったとしても、キーは単に
| そのキーの値が削られるだけで、後ろが自動的に詰まるわけではない、ということで
| すよね?
そうだとおもいます。
配列と名のつくもので、要素を削除したときに自動的
に埋めるような実装がされている言語を私は知らない
のですが、PHP の配列は内部的には連想配列と同じ処
理をしているように見えるので、そもそもユーザが意
図する「前後」とか「順番」というものを保証してい
るものではないのかもしれません。下でも書きますが、
あくまでユーザが管理しないといけないようです。
| <?php
| $a = array("a"=>"A","b"=>"B");
| print "\$a[0] => " . $a[0];
| ?>
| のように、配列 $a の最初の要素を表示したいと思ってもできない、ということにな
| りますね。
それはできません。
ちょっとおっしゃっていることとずれるかもしれない
ですが、連想配列においては「最初の要素」や、「前
後」「順番」などという考え方自体を放棄したほうが
無難かと思います。
PHP の each 関数などでは、代入された順にでてくる
ようになっているようですが、いろいろ unsetしたり
追加しているうちに順番が思ったとおりになっていな
いかもしれません。
配列に関しては、通常の言語だと最初の要素や要素の
並び順を処理系が知っているのが普通ですが、PHP の
場合は、先ほどの例で示したように、そうでもないよ
うです。
つまり、ユーザが添え字の番号順に処理するように
明示的に書いてやる必要があるようです。
先ほどの join の例でいうなら、代入の順序が添え字
の番号順にならない可能性がある場合は、join を使
わずに
for($i=0; $i<count($arr); $i++) {
print $arr[$i];
if( $i != count($arr)-1 ) { print "," }
}
とする、というようにです。
結論としては、PHP の配列は連想配列と同じだと思う
ようにしようかな、というところですが、断定的・演
繹的なことはソースを見ないと言えません。
すみませんです。
--
,-------------+
+----------------------------------------------------' |
| 株式会社 IT Boost / アイティーブースト |
| 松嶋 祥文 [ mats@itboost.co.jp ] |
| http://www.itboost.co.jp/ |
| PHP, Perl, PostgreSQL, Apache, Java 他、いろいろあります。|
+-------------------------------------------------------------------+