• ベストアンサー

【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

  • 【PHP】配列の最後の要素のキーを知るには

    以下のような乱雑な配列があったとして中身がわからない場合、最後の要素のキーが「12」であることを知るにはどうすればいいでしょうか? お詳しい方、よろしくお願いいたします。 $myArray = array(); $myArray[2] = ''; $myArray[5] = 'a'; $myArray[9] = NULL; $myArray[12] = 'z';

    • ベストアンサー
    • PHP
  • 連想配列 PHP 上書き

    失礼します あるkeyに対して配列の要素を追加したいのですが 上書きされてしまいます。 例えば array(1) { ["hogehoge"]=> string(8) "piyopiyo" } array(1) { ["hogehoge"]=> string(8) "tekoteko" } をあるkey array(3) { ["key"]=> array(24) { ["hogehoge"] => "piyopiyo" ["hogehoge"] => "tekoteko" のような感じで追加していきたいです。 ご教授よろしくお願いいたします。

    • 締切済み
    • PHP
  • 配列を比較して同じものがあった場合にそのKEYを返す

    二つの配列を比較して同じ値が入っていた場合、そのKEYを配列に入れたいと思います。 (例)$aと$bを比較して同じ値が入っているときに$aのkeyを$cに格納したい。 $a = array("","","山","","川","海","","富士山","空","",""); $b = array("川","","","","","海","","富士山","空",""); ※空白は無視したい。 この場合 $c = array("4","5","7","8"); のようにしたいと思います。 どなたか教えてください。

    • ベストアンサー
    • PHP
  • php 多次元配列において指定したキーの値を取得

    いつも世話になっております。 PHPの初歩的な質問をさせてください。 多次元配列において指定したキーの値を取り出す方法はありますでしょうか。 array_searchの逆というべきでしょうか、値を検索するのではなくキーを検索してその値を取り出したいです。 イメージ例 $array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red'); $val = array_xxx($array, 0); // $val = 'blue'; みたいな感じの… 関数でなくてもまったく問題ありませんが… どうぞ、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPの配列要素に別の配列を入れるには?

    とある商品情報を管理するPHPプログラムを書いています。 最終的に、$Paramsの'goodIdArray'という要素に商品情報を2つ入れたいと思っています。 以下の通りに書いてみたんですが、うまくいきません。 $goods_id = array( 'goods_id' => '商品1', 'goods_id2' => '商品2'); $info['goods_id'] = $goods_id;  #$info配列の「goods_id」という要素にgoods_id配列を入れる $goodsIdArray[] = $info['goods_id']['goods_id']; #goodsIdArrayに商品1を入れる $goodsIdArray[] = $info['goods_id']['goods_id2']; #goodsIdArrayに商品2を入れる $Params = array('goodIdArray' => $goodsIdArray) #inParams配列の「goodIdArray」という要素に$goodsIdArray(商品1と商品2)を入れる 無駄に変数を使いまくっているように見えますが、もともとのプログラムが複数のPHPファイルにまたがって動作しているため、変数がこれだけの数になっています。 そもそも、ある配列の要素に別の配列(複数要素をもつもの)は入れられないんでしょうか。 素人の質問でトンチンカンなことを言っているかもしれませんが、ご回答お願いします。

    • 締切済み
    • PHP
  • 連想配列のキー値(連番)を基に、別の配列を作るには?

    下記のように、キー値の一部に連番を持った連想配列 があるのですが、このキー値と連番で別の配列を 簡単に作る方法は無いでしょうか? もとの配列 $ary = array("item0"=>"x","item1"=>"y","item2"=>"z","data0"=>"o","data1"=>"p","data2"=>"q"); 上の$aryから $item=array([0]=>"x",[1]=>"y",[2]=>"z"); $data=array([0]=>"o",[1]=>"p",[2]=>"q"); のような形の配列を得たいのです。 foreach($ary as $key => $val){ } の構文で、$key値を調べて分断し、新しい配列に pushしていくしかないでしょうか? ※PHP4.3です

    • ベストアンサー
    • PHP
  • 【PHP】配列のキー名の修正は可能ですか?

    PHP5利用者です。 例えば、 $myArray = array('ringo'=>200, 'momo'=>300, 'banana'=>100); と設定したあと、momo を sumomo に一発修正する方法はあるのでしょうか? momo を消して sumomo 追加では順番が変わりますし、 $myArray → $myArray2 に全要素移し替えというのも多次元配列の時などは煩雑ですし・・・ 関数など、もしワンタッチでできる方法があるなら教えてください。 ないならないであきらめて地道な手順でやりたいと思います。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 多次元配列で、foreachを使って、key値を

    多次元配列で、foreachを使って、key値を入れ替えているのですが、 なんで、こうなるか分かりません。  $x = array();  $x[] = array(   "id" => 1,   "name" => "JavaScript",  );  $x[] = array(   "id" => 5,   "name" => "PHP",  );  $z = array();  foreach($x as $key => $value){   $z[$value["id"]] = $value;   }  print_r($z); 配列のKEYをIDに変更しているのですが、 なんで、こうなるのでしょうか? 特に、  $z[$value["id"]] = $value; が分かりません。 例えば、foerachの途中で、var_dumpすると、 1回目だと、 ◆$key 0 ◆$value Array (  [id] => 1  [name] => JavaScript ) ◆$value["id"] 1 まではいいのですが、 ◆$z[$value["id"]] の値が見れません。 ここはどんな処理をやっているのでしょうか?

    • ベストアンサー
    • PHP
  • 不要な配列を消したい

    2次元配列で、不要な要素を取り除きたいのですが良い方法が思い浮かばず、どうしたものかと悩んでいます。 一番初めと5番目を消したいのですが、preg_match で日付の2006にマッチしない要素をunsetしてみましたがうまくいきませんでした。 $data = array ( array('<br>'), array("2006 03 22", test), array("2006 03 23", test2), array("2006 03 25", test3), array('') ); $pattern = '/2006/'; foreach($data as $key => $value) { if(preg_match($pattern, $value[$key])) { unset($data[$key]); } } もし方法をご存知のかたおられましたらよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 連想配列を array_multisort() でphp4、php5の違い

    いつもお世話になります。 連想配列をarray_multisort()でソートしようとしています。 php5のサーバでは思うように動作するのですが、 php4のサーバでは、ソートされません。 print_r($ary); Array ( [BuID] => 11 [BuName] => aaaa [yymmdd] => 080507 [DateDisp] => 08年05月07日(水) [DateType] => 1210086000 [TaikaiName] => AAAA [HRef] => [AnkName] => ) Array ( [BuID] => 12 [BuName] => bbbb [yymmdd] => 080822 [DateDisp] => 08年08月22日(金) [DateType] => 1219330800 [TaikaiName] => BBBBBBBB [HRef] => [AnkName] => ) ・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・ の様な連想配列をyymmddでソートしようとしています。 php5.2.6だと、 foreach($ary as $key => $row){ $yymmdd[$key] = $row['yymmdd']; } array_multisort($yymmdd,SORT_DESC,$ary); で、$aryにyymmddで並び替えられた配列が入ります。 しかし、php4.2.2では、ソートされず、もとの配列がそのまま$aryに入ってしまいます。 array_multisort()は、phpのバージョンによって動作が異なるような記載もありません。 どなたかわかる方見えましたらよろしくお願いいたします。

    • ベストアンサー
    • PHP
アクセスできないサイト多数
このQ&Aのポイント
  • ESETでブロックされるサイトが多数あります。解除方法は?
  • ESETセキュリティ ソフトウェアを使用していると、アクセスできないサイトが増えてしまいます。解除する方法はあるのでしょうか?
  • ESETセキュリティ ソフトウェアでブロックされているサイトを解除する方法を教えてください。
回答を見る