連想配列の生成 - PHPプロ!Q&A掲示板

2377

  • 0P

連想配列の生成

質問日時 / 2009年11月29日 22:01    回答数 / 4件

Questioner:  DONGURI  このエントリーをはてなブックマークに追加 

キーワード / 連想配列   

PHP初心者です。
宜しくお願いします。

下記の様なjsファイルを読み込み
  1. var fruit = {
  2.   'りんご' : 'apple',
  3.   'みかん' : 'orange',
  4.  
  5.   'なし' : 'pear',
  6.   'ぶどう' : 'grape',
  7.   'バナナ' : 'banana',
  8.  
  9.   'いちご' : 'strawberry'
  10. }

PHP内でこれを連想配列
  1. $fruitPlist = array(
  2.   'りんご' => 'apple',
  3.   'みかん' => 'orange',
  4.   'なし' => 'pear',
  5.   'ぶどう' => 'grape',
  6.   'バナナ' => 'banana',
  7.   'いちご' => 'strawberry'
  8. );
としたいと思い
下記の様にしてみましたが、うまく生成されません。

  1. $fruitf = fopen($lst.'/fruit.js', 'r');
  2.   flock($fruitf, LOCK_SH);
  3.   
  4.   $fruitList = array();
  5.   
  6.   while(!feof($fruitf)) {
  7.     array_push($fruitList, fgets($fruitf));
  8.   }
  9.   $fruitCount = count($fruitList);
  10.   $fruitPlist = array();
  11.   for($i=0; $i<$fruitCount; $i++) {
  12.     if(preg_match('/:/', $fruitList[$j])) {
  13.       $fruitList[$i] = preg_replace('/,$/', '' , $fruitList[$j]);
  14.       $fruitSplit = split(':', $fruitList[$i]);
  15.       $fruitPlist[$fruitSplit[0]] = $fruitSplit[1];
  16.     }
  17.   }
  18.  
  19.   echo $fruitPlist['みかん']; //何も出力されず

どの様にしたら良いのでしょうか。

宜しくお願い致します。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01shimixとりあえずforのLoop中で$fruitSplit[0]と$fruitSplit
┃┗A01-1DONGURIご回答いただき、ありがとうございます。 お返事遅く
┗A02NurseAngelそんな面倒なことをしなくても。 http://jp.php.ne
 ┗A02-1DONGURIご回答頂きありがとうございました。 jsonとの連携

回答一覧

並び替え:

A01 満足
answerershimix [11月30日 00:51] (最終編集:11月30日 09:16)

とりあえずforのLoop中で$fruitSplit[0]と$fruitSplit[1]をprintしてみるべきじゃないでしょうか?あるいはecho $fruitPlist['みかん'];の代わりにprint_r($fruitPlist);で確認してみるとか・・。要所要所でprintで必要な変数の内容を確認してみるとか「ここは処理されている」というのを表示していけばよろしいかと。

そうすればLoop内のifで{ちゃんとtrueになっている|想定外にfalseになっている}というのもわかってくるかと思います。


ちなみに「引用符」は含んだままでいいんでしょうか?引用符を消してしまっていいなら下記のような感じでどうでしょう?

  1. for($i=0; $i<$fruitCount; $i++) {
  2.   if(strpos($fruitList[$i],":")) {
  3.     list($key, $val) = explode(":", $fruitList[$i]);
  4.     $key = trim(str_replace("'","",str_replace(",","",$key)));
  5.     $val = trim(str_replace("'","",str_replace(",","",$val)));
  6.     $fruitPlist[$key] = $val;
  7.   }
  8. }
  9. print_r($fruitPlist);


(追記)
「引用符まで必要」であれば、下記の記述で。
  1. $key = trim(str_replace(",","",$key));
  2.     $val = trim(str_replace(",","",$val));
でも引用符が付いていると、扱いにくいですよね。きっと。

#そういう使い方をしたことがないのでわかりませんが(汗

この意見に回答する

ツリーへ TOPへ

A01-1
replyerDONGURI [12月1日 23:52]

ご回答いただき、ありがとうございます。
お返事遅くなり申し訳ありません。
(インフルエンザでダウンしてました。。。)

教えて頂いた内容でちゃんと連想配列の生成ができました。
ありがとうございます。

まだ始めたばかりで、echoprintprint_rの違いもよく分かっていませんが、
記載して頂いた中に得るものがいっぱいありました。

本当に助かりました。

この意見に回答する

ツリーへ TOPへ

A02 満足
answererNurseAngel [11月30日 23:35] (最終編集:11月30日 23:48)

そんな面倒なことをしなくても。

http://jp.php.net/manual/ja/function.json-decode.php


こんなかんじ?
  1. $json = file_get_contents( 'fruit.js' );
  2. $split_json = explode( '{' ,$json ,2 );
  3. $fruitPlist = json_decode( '{'.$split_json[1] ,true );
#未確認

この意見に回答する

ツリーへ TOPへ

A02-1
replyerDONGURI [12月2日 00:42]

ご回答頂きありがとうございました。

jsonとの連携も出来るのですね。
これだけスッキリ出来るのは助かります。

このままではちょっと動かなかったのですが、
1行目の後に
$json = str_replace('var fruit = ', '', mb_convert_encoding($json, 'UTF-8', 'Shift-JIS'));
と入れたら動く様になりました。

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

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
マジッククォートとmysql_real_escape_string
 このエントリーをはてなブックマークに追加 
A
magic_quotes_gpcでは、SQLインジェクション対処は十分できません。主な理由として、以下が上げられます。 ・magic_quotes_gpcは文字コードを考慮しないで処理するので、Shift_JISを使っている場合、SQLインジェ...

>>続きを読む

SQLインジェクション対策は時と場合で使う関数が変わります。その時にあったものを使いましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)