• ベストアンサー

配列を連想配列に

$data=file(file); こちらで20行程度のデータを受け取り配列に入れたとして、、 $data[数字]ではなく $data[配列内のデータの最初の5文字]こちらをキーとして利用することは出来ませんか?? そうすれば条件にあった配列を検索かけて 必要なデータを取り出しやすくなるのですが。 配列の最初の5文字を取り出しキーとして使用する方法お願いします!!

noname#20805
noname#20805
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

最初の5文字が重複する場合は後のデータで上書きされます 日本語にも対応していません foreach($data as $val) { $array[substr($val, 0, 5)] = $val; } $data = $array;

noname#20805
質問者

お礼

ありがとうございました。

関連するQ&A

  • 連想配列を処理するにあたって

    お世話になっております。 連想配列について質問させて頂きます。 以下のような、キーに文字列、インデックスに数字を指定している連想配列があるとします。 Array([あいうえお] => 0 [かきくけこ] => 0 [さしすせそ] => 0 [たちつてと] => 0) この連想配列のキーを指定し、そのキーに対するインデックスの数字を別の数字に置換したく思っています。 仮に、「あいうえお」のキーを指定して、そのキーに対するインデックス「0」を「1」に変更したいのです。 array_fill()やarray_fill_keys()などの関数を調べて試してみましたができませんでした。確実にプログラムが間違っているとしか言いようがないのですが、どなたかアドバイスをお願い致します。 以下のコード中にその処理を持ってきたく思っています。 /* foreach($mystery_noun as $mystery_key => $mystery_value){ __foreach($mecab_noun as $mecab_key => $mecab_value){ ____if($mystery_key == $mecab_key){ ______ここにその質問の処理を記述する。 ____} __} } */ ある連想配列のキー(文字列)が一致した場合、そのキーに対するインデックスを0→1に変更します。 尚、$mystery_noun、$mecab_nounの連想配列全てのインデックスには、それぞれ1,0が格納されています。

    • ベストアンサー
    • PHP
  • PHPでfile()を使った際の配列の要素について

    PHPのfile関数の動作について質問させて頂きます。 テキストファイルからfile()を使って配列に各行のデータを取り込んだのですが、その配列から特定の要素を探そうとしたところ、検出できませんでした。 テキスト.txtの内容------- AAA BBB CCC --------------- $array = file("テキスト.txt"); $word = "AAA"; $keys = array_keys($array,$word); var_dump($keys); 簡略化しましたが、こんな感じで実行するとAAAが格納されているはずの[0]番目のkeyは検出されません。 bar_dumpを使って$array[0]と$wordを確認してみたところ、以下のようなデータが帰ってきました。 $array[0] → string(5) "AAA" $word → string(3) "AAA" まったく同じ文字列なのに、配列の方の長さが2ほど大きくなっています。 そこでtrimを使用してみたところ、配列からこの謎の2バイト?のデータが削除できました。 検索も正しく動作するようになりました。 文末に改行が入ってるのかとも思ったのですが、\nを削除する処理では検索が出来なかったので、不思議に思っております。 テキストファイルから取り込んだ際に、文字列の前か後ろに何らかの文字が入っているのだと思うのですが、実際どのような文字が入っているのでしょうか? ---------------------------------- それともう一つお聞きしたいのですが、 テキストファイル内容がある程度長い(100行以上、または1万文字以上など)場合、file()で配列にデータを取り込むのは負荷が大きかったりするのでしょうか? fgetsで1行ずつ取り出して比較する方法も考えたのですが、処理の繰り返しと取り込むデータの大きさのどちらに配慮するべきか悩んでいます。 もし100行や1万文字が多い・少ないという感覚になる場合、実際「配列にするには大きすぎる」という感覚はどれくらいの容量から考えるべきでしょうか? 後半の質問につきましては明確な答えで無くても、「自分はこう感じる」というような感覚的なご意見でもお聞きしたいと思っています。 お手数をおかけしますが、どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • 連想配列と別配列とのマッチング

    以下の連想配列と別にあるテキストファイルを配列にして ”マッチした商品名の全てのデータを表示したいです。 ■連想配列の形↓■ 50を超えるリンゴの種類が、以下のような 連想配列($alldata)の形であります。 $alldata = [1]=> array(5) { ["no"]=> string(1) "1" ["name"]=> string(5) "san-tugaru" ["color"]=> string(3) "red" ["price"]=> string(3) "150" ["memo"]=> string(10) "aomori" } [2]=> array(5) { ["no"]=> string(1) "2" ["name"]=> string(5) "ko-gyoku" ["color"]=> string(3) "red" ["price"]=> string(3) "250" ["memo"]=> string(10) "yamagata" } というふうに50個のリンゴのデータ続きます。 リンゴの配列情報の詳細は以下の通りです。 ※配列のKeyの番号とvalueの商品Noは同じで連想配列にしています。 商品No ["no"] 名称  ["name"] 色   ["color"] 価格  ["price"] 産地  ["memo"] +-------------------------------------------------+ ■テキストファイル(select-ringo.txt)の内容と意味■ このテキストファイルは、商品No「4、5、12、30」の リンゴを選んで表示したい場合です。 +----+ 4,1,10 5,4,13 12,2,9 30,3,15 +----+ ◇カンマで区切られた数字の意味◇ ・各行の先頭の数字は「商品No.」を選択します。 ・カンマで区切られた2番目の数字は、”色”を選択します。 たとえば、1行目であれば、 商品No 4 の全ての情報は カラー1=#ff0000 echo表示されます。 他の番号の場合は色は以下の通りです。 カラー1 =#ff0000 カラー2 =#ff6600 カラー3 =#ff0066 カラー4 =#ff3399 ・3番目の数字はフォントサイズ(px)を意味します。 +---------------------------------------------------+ テキストファイルに”商品番号のみ”を入れると以下のスクリプトで動作しますが、 カンマで区切った場合のマッチング方法に悩んでいます。 ※以前、こちらで親切な方に方法を教えていただきました↓ $selectNo = array_map(rtrim, file("select-ringo.txt")); foreach ($selectNo as $num) { if (is_numeric($num) && array_key_exists($num, $alldata)) { 表示 } } みなさん、お力をお貸しください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 連想配列と比較させ変換したいのですが

    ファイルから a,h,2,26,f というデータを読み込んで %hash = (1=>'a',2=>'b',‥‥,26=>'z') のような連想配列と比較させ 1,8,b,z,6 となるように、読み込んだものが英字ならキーを、数字なら値を 出力させたいのですが可能でしょうか? お教え願います。

    • ベストアンサー
    • Perl
  • 連想配列のソート

    次のような連想配列があります。 $buff[0][0]=1; $buff[0][1]=567; $buff[0][2]=134; $buff[0][3]="文字列"; $buff[1][0]=2; $buff[1][1]=246; $buff[1][2]=537; $buff[1][3]="文字列"; $buff[2][0]=3; $buff[2][1]=897; $buff[2][2]=334; $buff[2][3]="文字列"; ~ 要するに キー,数字,数字,文字列 が並んでいて、キーと値を保持したまま真ん中の数字二つを使ってソートしたいのですが、どのようにすればいいでしょうか。 asort($buff[1], SORT_NUMERIC); reset ($buff[2]); asort($buff[2], SORT_NUMERIC); reset ($buff[2]); のように試してみたのですが、まったく並びは変わりませんでした。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Excel2003、配列から、複数の条件一致する行のデータを取り出す方

    Excel2003、配列から、複数の条件一致する行のデータを取り出す方法 配列は最大で10行、10列程度ですが、このデータはリアルタイム(0.5秒間隔)で更新されますので、 分類等はできません。 A列のデータがZ1のセルのデータと一致し、かつ、B列は、特定の”文字列”と一致し、かつ、C列は数量で、0より大きい(負のデータは無いが、""はあり得る)という条件に合致した行があったら、その行のD列の値をZ2のセルに格納したい。 条件に合致する行は複数あり得るが、そのときは最初に条件が合致した行のデータが必要。 いくつかの関数を調べましたが、つまづいています。

  • awkの連想配列について

    配列の要素に、インデックス番号ではなく、文字列そのもの を使用(ハッシュテーブルを利用した連想配列)することで、 処理速度を大幅に改善することができましたが、この要素に 指定する文字列の長さに制限はあるのでしょうか?また、全 角文字は駄目といった制限はあるのでしょうか?教えて下さい。 以上、よろしくお願いします。

  • AWKの配列内データの処理について

    AWKを使用して入力ファイルの1行内の単語に対して条件チェックするには for( i=1 ; i<= NF i++ ){    if( $I == chek_word )       処理 } とすればできるのはわかるのですが、 一旦、配列の中に格納した文字列に対して上記の処理と同様の処理をするにはどのようにすればいいのでしょうか? 例えば data_line[$1] = $0; として配列data_lineに格納した1行そのままのデータに対して1番上の行全体にわたる単語の条件チェック をおこないたいのですが、どのようにすればいいのかよくわかりません。 どなたかご存知の方アドバイスをお願いします。

  • 固定長ファイルを配列に!

    5行まで違うデータが入っていて 6行目から 347.44 14832 616 4.15 といったようなデータになっています。 この数値だけを配列に入れようと思うんですが どうすればよいでしょうか? ちなみに・・・ 1行ずつ文字列として配列に入れて 6行目に当たる配列から substrを使ってそれぞれ分けようと思ったのですが 小数点がない真ん中の二つのデータが うまくとれないんです。 わかる方よろしくお願いします。

    • ベストアンサー
    • PHP
  • 数千の配列をランダムに並べて表示

    数千の配列をランダムに並べて表示させるプログラムを作りたいと思っています。プログラムはPHPを考えています。 例えば配列数を1000だとすると $file_name[0] = "files0"; $file_name[1] = "files1"; $file_name[2] = "files2"; $file_name[3] = "files3"; $file_name[4] = "files4"; ・・・ $file_name[999] = "files999"; だとします。この配列からランダムに重複無く表示したいと思っています。出力例として、 files3 files328 files1 files32 ・・・ files473 とこんな感じです。私の考えたアルゴリズムではランダムの数字を出力し、その配列が表示されていれば再度ランダムな数字を算出、配列が表示されていなければ表示し、配列が表示されたというフラグを付けます。 しかし、この方法だと最初はスムーズに出てくるのですが、最後にはなかなか出力されないようになります。当然といえば当然ですが。 アルゴリズムだけでも、ご存知の方ご教授いただけると幸いです。

    • ベストアンサー
    • PHP

専門家に質問してみよう