[PHP-users 19386]Re: [1]から始まる多次元配列

Osamu Shigematsu m5issige @ mr.hitachi-medical.co.jp
2003年 12月 17日 (水) 10:59:42 JST


重松です。こんにちは。

> > ランダムに n 番目の要素にアクセスする方法は私は知りません。
> > # あったら教えてください。 m(__)m
> 
> キー内容に関わらず 3番目の要素にアクセス,とかって意味であれば,

という意味です。
表現があいまいだったと思います。

ランダムというのは、シーケンシャルに対して、ランダム、という意味で、
任意の要素にアクセスするであり、無作為にという意味ではありませんでした。
斉藤さん、誤解を与えてしまい、申し訳ありませんでした。

> <?php
>   $array = array( '任意の配列', ... );
>   $index = 3;
> 
>   $keys = array_keys( $array );
>   print $array[ $keys[ $index ] ];
> ?>

とりあえず、大きな配列からキーをとってくる場合には、
オーバーヘッドが気になりますが、
やりたいことが簡単に実現できます。

> # 自分は perl から来た人なので,
> #   print $array[ ( array_keys( $array ) )[ $index ] ];
> # と書きたくなりますが Parse error :-)
> # PHP はこういうのを楽に書く Syntax Sugar が少ない.

上記のようなことを、以前私も試して、parse error になりました。

で、個人的には、あまり融通が利きすぎるのもどうか、と最近思っています。
自分ひとりだけが使うのであれば、一つのことをやるのにさまざまな表現が
許容されるほうが楽な書き方 (好みの方) を選択できるので良いのですが、
そうでない場合、特に仕事などで多人数で作業する必要がある場合、

 1. 個性 (個人的な好み)
 2. 言語の隅々まで知っている人の効率的な表記

なんかも、場合によっては問題を引き起こすんじゃないかと思ったりします。

1. は、例えば、PEAR なんかだと、PCS というコーディング標準規約を決めて、
{} の配置だとか、() の前の空き、命名規則を定めてますが、
そういう狭義の好みに始まって、例えば、今回のような配列の要素をなめていく
ような処理の場合、

 (1) count で要素を数えてインデックスでアクセスする
 (2) foreach で要素を巡回する
 (3) array_map などのコールバックを使用する

というようにいくつもの方法があるわけですが、選択肢を選択するためには、
それだけ覚えることが増えるわけで、保守をする場合、当然、
コードが何をしているか理解するの困難になるのではないかと思います。

2. については、本来は良いことだと思いますが、例えば、演算子の優先順位は
言語ごとに異なるので、PHP に精通していて優先順位に絶対の自信があるから、
() を省略してあって、ぱっと見て分かりづらい、なんてのは考え物です。
これは極端な例ですが、言語の仕様としても、なるべくシンプルなほうが
いいと感じます。

-- 
Osamu Shigematsu <m5issige @ mr.hitachi-medical.co.jp>



PHP-users メーリングリストの案内