• ベストアンサー

【PHP】配列のキーに「会員番号」を入れるのは非常識?

PHP初心者です。 配列に関して悩んでいます。 キーに「148」等の会員番号を入れて要素に「○山○夫」等の要素を入れるとします。 ここでうっかり「array_reverse()」などを使おうものなら会員番号が付け変わってしまいめちゃくちゃになってしまいます。 このへんの問題に対してプロの方はどんな方法で対処されてるのでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

私もarray_reverse()自体を使わないでループを逆に回すとかで対処しますね どうしても使いたい場合は会員番号の頭に文字をつけて連想配列にするという方法も $input = array(1 => "sato",2 => "suzuki",3 => "takahashi"); $result = array_reverse($input); print_r($result); ↓ Array ( [0] => takahashi [1] => suzuki [2] => sato ) $input = array("a1" => "sato","a2" => "suzuki","a3" => "takahashi"); $result = array_reverse($input); print_r($result); ↓ Array ( [a3] => takahashi [a2] => suzuki [a1] => sato )

takosuke88
質問者

お礼

キーを数字でなくするのはいいアイデアですね。 これなら絶対付け変わらない! ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

#3さんがプロパティ的な考え方をあげているとおり、複雑なデータになると 単純な配列ではきびしくなるとおもいます。 こんな感じでアクセスすると使い勝手がよくなるとおもいます。 <?PHP function getListFromID($item,$key,$args){ $args[0][$item['id']]=$item[$args[1]]; } $a=Array( Array("id"=>100,"name"=>"佐藤","address"=>"東京") ,Array("id"=>150,"name"=>"田中","address"=>"大阪") ,Array("id"=>200,"name"=>"鈴木","address"=>"名古屋") ); array_walk($a,"getListFromID",Array(&$name,'name')); print_r($name); array_walk($a,"getListFromID",Array(&$address,'address')); print_r($address); $a=array_reverse($a); unset($name,$address); array_walk($a,"getListFromID",Array(&$name,'name')); print_r($name); array_walk($a,"getListFromID",Array(&$address,'address')); print_r($address); ?>

takosuke88
質問者

お礼

やっぱ2次配列ですね。 ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.3

良くやりますね。非常識と言うより、むしろ常識的じゃないでしょうか。 DBから取ってきたデータをわざわざ入れ替えたりしますよ。 例えば、DBから取ってきたデータはだいたいこんな感じですが $arr = array (  0=>array("id"=>"a2","name"=>"佐藤","tel"=>"03xxxxx"),  1=>array("id"=>"a4","name"=>"鈴木","tel"=>"05xxxxx"),  2=>array("id"=>"b2","name"=>"渡辺","tel"=>"01xxxxx") ); これだとidが3の人の名前、と言う場合不便だったりしますので、 foreach($arr as $data){  $newarr[$data["id"]] = array("name"=>$data["name"],"tel"=>$data["tel"]); } のように変換しておけばとても簡単にアクセス出来るようになりますからね。 なお、array_reverseの場合であっても、オプションの第二変数のpreserve_keys が TRUEとすればキーが保持されます。

takosuke88
質問者

お礼

なるほど。 2重配列ですね? array_reverse() に「TRUE」があったのはうっかりしてました。 ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.1

キーに会員番号を入れている場合、array_reverse()を使うことはないのではないでしょうか? ksortやusortなどを使うことになると思います。 配列のキーに会員番号を入れることはとても常識的だと思います。

takosuke88
質問者

お礼

なるほど! array_reverse()はあくまで例なので必要性については問わないということで・・ とにかく「勝手に」キーが変化するのが不満だったのです。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A