dポイントプレゼントキャンペーン実施中!

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. …

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次元配列のものをうまく表示できるのかわからないのです。

わかりにくかったらすいません。どうか、よろしくお願いします。

A 回答 (1件)

ソース、あんまりちゃんと見てないけれど3次元を2次元にするときに


2次元側がどうなってるか確認したらいいよ。

基本的にどちらも同じ情報の扱い方をしているのなら
{"a","b","c"} <-> {"a","b?c"}
の様な形であるならbとcをクエリ文字「?」で連結しているだけだよね?
そういう事をすれば良いよ。
使ってない物は破棄すればよいし。

この回答への補足

ご回答ありがとうございます。

> {"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...
    )
  )

補足日時:2010/06/05 00:43
    • good
    • 0
この回答へのお礼

回答のとおり$idと$iのキーをくっつけたらなんとか出来るようになりました!
おかげでスムーズに作業が進みそうです。

本当にありがとうございました!!感謝です!!

お礼日時:2010/06/05 03:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!