3次元配列を2次元配列にする方法はありますか?
- 初心者がオープンソースの統合型メタ検索エンジンを作成しています。現在、yahooの結果は2次元配列で表示されていますが、googleの結果は3次元配列です。両方を2次元配列に統一したいと考えています。しかし、どの部分を修正すれば良いのか分からない状況です。
- ベストアンサー
3次元配列を2次元配列にする方法はありますか?
3次元配列を2次元配列にする方法はありますか? すいません、初心者です。 オープンソースとyahooとgoogleのAPIを使って統合型メタ検索エンジンを作っています。 yahooの結果の配列は2次元配列で出せました。 $search_results[$i]["url"] google APIは1回のリクエストで8件までしか呼び出せないみたいなので、 curl_multi関数を使って複数のリクエストを同時に取得しています。 そうしたら結果の配列は三次元配列になりました。 $search_results[$id][$i]["url"] 以下googleの関数です。curl_multiの部分等、文字数の関係で省略しています。 省略した部分のソースは下記リンクにのっています。 http://phpspot.org/blog/archives/2008/02/phpapi.html function search_google($query) { $curls = array(); $search_results = array(); $i=0; $site_results = array( 'http://ajax.googleapis.com/&start=0', 'http://ajax.googleapis.com/&start=8', 'http://ajax.googleapis.com/&start=16', 'http://ajax.googleapis.com/&start=24', 'http://ajax.googleapis.com/&start=32', 'http://ajax.googleapis.com/&start=40', 'http://ajax.googleapis.com/&start=48', 'http://ajax.googleapis.com/&start=56'); foreach($curls as $id=>$c) { $searchs[$id] = curl_multi_getcontent($c);//$cが$site_resultsのリクエスト結果 curl_multi_remove_handle($mh, $c); $json=json_decode($searchs[$id]); if($json->responseStatus != 200){exit();} $responseData = $json->responseData; $results = $responseData->results; for($i=0;$i<count($results);$i++){ $title = $current_result->title; $search_results[$id][$i]["title"]= $title; } } curl_multi_close($mh); return $search_results; } 統合型メタ検索にしたいと考えているのでgoogle配列の変数[$id]同士を結合して yahooの結果と同じく $search_results[$i]["url"] のような二次元配列にしたいのですが、そのようなことは可能ですか? 本当は両方とも3次元配列にするという処理が適切だと思いますが、初心者がオープンソースを改良して使用しているので、どこを直せば3次元配列のものをうまく表示できるのかわからないのです。 わかりにくかったらすいません。どうか、よろしくお願いします。
- megdog
- お礼率100% (1/1)
- PHP
- 回答数1
- ありがとう数4
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ソース、あんまりちゃんと見てないけれど3次元を2次元にするときに 2次元側がどうなってるか確認したらいいよ。 基本的にどちらも同じ情報の扱い方をしているのなら {"a","b","c"} <-> {"a","b?c"} の様な形であるならbとcをクエリ文字「?」で連結しているだけだよね? そういう事をすれば良いよ。 使ってない物は破棄すればよいし。
関連するQ&A
- 3次元配列を1次元配列に
例えば2次元配列だと, array[row*i+j] = a[n]; といったように1次元に直すことができますよね? 同様に3次元配列を1次元配列にしたい場合には arrayの中はどのような式をつかえばいいのでしょうか。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 多次元配列を2次元の連想配列で表したい
PHP初心者です。 $category = array( array( 'ライフ' ), array( 'デジタルライフ', array( '携帯・PHS' ), array( 'ワンセグ放送' ) ), array( '趣味', array( 'AV機器', array( 'オーディオ' ), ), ), ); このような多次元配列を $new_category = array( array( 'id'=> '1', 'parent_id' => '-', 'name' => 'ライフ', ), array( 'id'=> '2', 'parent_id' =>'-', 'name' => 'デジタルライフ', ), array( 'id'=> '3', 'parent_id' => '2', 'name' => '携帯・PHS', ), array( 'id'=> 4, 'parent_id' => '2', 'name' => 'ワンセグ放送', ), array( 'id'=> 5, 'parent_id' => '-', 'name' => '趣味', ), array( 'id'=> '6', 'parent_id' => '5', 'name' => 'AV機器', ), ); このような二次元配列に変換したいです。 parent_idを入れておく配列を作って、階層が深くなったら前の要素のIDを配列に入れ、浅くなったら配列の末尾の要素を消去する…みたいなことを考えてあれこれやってみたのですが、なかなかうまくいきません。 何か良い方法がありましたら、教えていただけるとありたがいです。 よろしくお願い致します。
- ベストアンサー
- PHP
- foreachで多次元配列にしたくないのですが……
foreachで多次元配列にしたくないのですが、多次元配列になってしまいます。 なぜでしょうか? ■$hoge Array ( [0] => 3 [1] => 9 ) ■処理 foreach ($hoge as $val){ $result[]= 関数($val); } ■期待している結果 Array ( [0] => Array ( [id] => 1 [created_at] => 2013-08-01 ) [1] => Array ( [id] => 2 [created_at] => 2013-08-02 ) ) ■実際の結果 Array ( [0] => Array ( [0] => Array ( [id] => 1 [created_at] => 2013-08-01 ) ) [1] => Array ( [0] => Array ( [id] => 2 [created_at] => 2013-08-02 ) ) )
- ベストアンサー
- PHP
- 多次元配列の入れ替え
いつもお世話になります。 PHPで多次元配列の入れ替えについて悩んでおります。 以下のようなデフォルトの配列から、整形後の配列 へ変換したいのですが、どのように扱ってよいか 頭が回らず困っています。 2次元目のクラスが等しいもののidをキーとして、 名前を値としたいのですが。。。 どうぞ宜しくお願いします(>へ<) //デフォルトの配列 Array ( [0] => Array ( [id] => 1 [class] => A [name] => 佐藤 ) [1] => Array ( [id] => 2 [class] => A [name] => 山下 ) [2] => Array ( [id] => 3 [class] => B [name] => 田中 ) [3] => Array ( [id] => 4 [class] => B [name] => 高橋 ) ) //整形後の配列 Array ( [A] => Array ( [1] => 佐藤 [2] => 山下 ) [B] => Array ( [3] => 田中 [4] => 高橋 ) )
- ベストアンサー
- PHP
- 2次元の連想配列を検索できません。
以下の2次元配列でstatusが2の配列(orange)だけを 返したいのですがPHPでどう組めば実現できるでしょうか? Array ( [orange] => Array ( [start_date] => 20041122 [status] => 2 ) [apple] => Array ( [start_date] => 20041123 [status] => 1 ) ) foreach()とかやってみているのですが、はまってます(T_T)
- ベストアンサー
- PHP
- 二次元配列が上手くいきません
Sample.txt 2 2 10 01 php <?php $handle = fopen('sample.txt','r'); // ファイルを開いてファイルポインタを取得 $contents = fread( $handle, 1024 ); // ファイル内容を1024バイト分読み込んで変数に格納 fclose( $handle ); // ファイルを閉じてファイルポインタを破棄 $start_part=array_map("trim",explode("\n",$contents));//$start_partは初期画像の行の配列 改行を削除 $r = $start_part[0];//横サイズを読み込む $g = $start_part[1];//縦サイズを読み込む $start[][]=""; //g行r列の2次元配列を作成 start[x][y],end[x][y]; for($j=0;$j<$g;$j++){ for($i=0;$i<$r;$i++){ $start[$i][$j] = substr($start_part[2+$j],$i,1); } } print_r($start); ?> xamppでphpの勉強をしている初心者です。 理想では$start[0][0]=1 $start[0][1]=0 $start[1][0]=0 $start[1][1]=1となってほしいのですが、 Array ( [0] => Array ( [0] => ) ) としか表示されず困っています。どこを直せばよいのでしょうか。どこが良くないのでしょうか。 ご教授ください。よろしくお願いします。
- 締切済み
- PHP
- 多次元動的配列使いたいんだけどboostっていいの?
多次元動的配列を使用したいのですがC++標準にはないんですhね・・・。 それで調べてみたのですがboostのmulti_arrayで実現出来るぽいことがわかりました。 そこでいくつか質問があります。、 (1)BCCを使用してるのですが、boostとの相性(あるのか知らないけど)とかっていいのでしょうか? (2)boostよりいいのってあるのでしょうか?(あれば教えてください。) (3)有料でしょうか? (4)使いやすいでしょうか? 以上、よろしくお願いします。
- 締切済み
- C・C++・C#
- 多次元配列を連想配列へ変換したい
以下のような多次元配列を、 Array ( [0] => Array ( [0] => Array ( [id] => 3 [hoge_id] => 15 ) ) [1] => Array ( [0] => Array ( [id] => 9 [hoge_id] => 15 ) ) [2] => Array ( [0] => Array ( [id] => 18 [hoge_id] => 15 ) ) [3] => Array ( [0] => Array ( [id] => 22 [hoge_id] => 15 ) [1] => Array ( [id] => 22 [hoge_id] => 15 ) [2] => Array ( [id] => 22 [hoge_id] => 15 ) ) ) 下記のような連想配列へ変換したいです Array ( [0] => Array ( [id] => 3 [hoge_id] => 15 ) [1] => Array ( [id] => 9 [hoge_id] => 15 ) [2] => Array ( [id] => 18 [hoge_id] => 15 ) [3] => Array ( [id] => 22 [hoge_id] => 15 ) [4] => Array ( [id] => 22 [hoge_id] => 15 ) [5] => Array ( [id] => 22 [hoge_id] => 15 ) )
- ベストアンサー
- PHP
- JSON多次元オブジェクト(?)を配列へ変換したい
・下記のようなJSON多次元オブジェクト(?)を配列へ変換したいのですが、どうすれば良いでしょうか? ・json_decode試したけどうまくいきませんでした ・出来れば、data以下だけを配列で取得したいです array(1) { [0]=> string(1284) {"version":1,"req_id":null,"error":null,"data":[ {"name":"Sad","j_title":"A","id":"23","thumb":"hoge1","date":"2009","title":"Ch","url":"hoge2"}, {"name":"Wil","j_title":"r","id":"30","thumb":"hoge3","date":"2013","title":"Po","url":"hoge8"} ]} [1]=> string(1282) {"version":1,"……
- ベストアンサー
- PHP
- 多次元配列を、1次元の配列にする関数を書いてください。
以下のように、多次元配列の配列をペチャンコにする関数(array_flatten)ってどうかきますか? <?php $arr[0] = 'a'; $arr[1][0] = 'b'; $arr[1][1][0] = 'c'; $arr[1][1][1][0] = 'd'; $arr[1][1][1][1][0] = 'e'; $arr[1][1][1][2] = 'f'; $arr[1][1][2] = 'g'; $arr[1][2] = 'h'; $arr[2] = 'i'; function array_flatten($arg){ 処理; } $new_arr = array_flatten($arr); print_r($new_arr); ?> ↓ Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i ) ※関数のなかで、ペチャンコの配列を格納するための新しい配列を宣言すると、 同関数を再帰的に呼び出したら、その配列が初期化されますよね?
- ベストアンサー
- PHP
お礼
回答のとおり$idと$iのキーをくっつけたらなんとか出来るようになりました! おかげでスムーズに作業が進みそうです。 本当にありがとうございました!!感謝です!!
補足
ご回答ありがとうございます。 > {"a","b","c"} <-> {"a","b?c"} こうする場合、 $search_results[$id][$i]['url'] では $search_results[$id?$i]['url'] とすれば良いということでしょうか? わかりにくいと思ったので一応補足です。 googleの3次元配列の結果を print_r で出力すると以下のようになります。 array ([0]=>array ([0]=>array ([url] =>http://abc... [title]=>abc... ) [1]=>array ([url] =>http://def... [title]=>def... ) ) [1]=>array ([0]=>array ([url] =>http://ghi... [title]=>ghi... ) [1]=>array ([url] =>http://jkl... [title]=>jkl... ) ) これを以下のようにしたいです。 array ([0]=>array ([url]=>http://abc... [title]=>abc... ) [1]=>array ([url]=>http://def... [title]=>def... ) [2]=>array ([url]=>http://ghi... [title]=>ghi... ) [3]=>array ([url]=>http://jkl... [title]=>jkl... ) )