2012-01-26 24 views
0

は、このPHPコード持って外に:私はこの問題を解決することができ、あるいは私が間違っているのどの方法PHP用のforeach多次元データ、それ

$data['items'] = array('cars', 'bikes', 'trains'); 
$data['title'] = $parameters['title']; 

foreach ($searchResults as $key => $value) 
{ 
    switch ($key) 
    { 
     case "_cars": 
     foreach ($searchResults['_cars']['items'] as $car) 
     { 
      preg_match('@video/([^_]+)_([^/]+)@', $car['url'], $match); 
      $url = $match[1].'/'.$match[2]; 
      $url = base_url().'video/'.substr($url,0,1).'d'.substr($url,1); 

      $data['data']['car']['url'] = $url; 
      $data['data']['car']['title'] = $car['title']; 
      $data['data']['car']['img'] = $car['thumbnail_medium_url']; 
     } 
     break; 
     // ................ 

をため、URL、タイトルおよび外IMG case "_cars": foreach...が、内部用$['data']['car'][...]リターンのみ1アイテムすべてのデータを返します。

編集: しかしforeach ($searchResults['_cars']['items']...ループ内でますprint_r($データ)を行うことは、すべてのデータを返し、それだけforeach 1の外に私はなぜだろうか?

+1

あなたのforeachループで '$ data'を上書きしているので、1つのアイテムしか返しません。 – Josh

+0

それはそうではありません...私はcodeigniterの中にあるので、私はそうしています – Alex

答えて

5

私はあなたが希望しているものはかなりわからないんだけど、各反復は、配列のキーの実際の値を上書きしているように一見、それが見えます:

$data['data']['car']['url'] = $url; // this is overwritten each time 

あなたはイテレータを作成する必要があり、

$i = 0; 
foreach ($searchResults['_cars']['items'] as $car) 
{ 
    preg_match('@video/([^_]+)_([^/]+)@', $car['url'], $match); 
    $url = $match[1].'/'.$match[2]; 
    $url = base_url().'video/'.substr($url,0,1).'d'.substr($url,1); 

    $data['data']['car'][$i]['url'] = $url; 
    $data['data']['car'][$i]['title'] = $car['title']; 
    $data['data']['car'][$i]['img'] = $car['thumbnail_medium_url']; 
    $i++; 
} 
+0

ありがとう、それは...ありがとう再び – Alex

+0

'$ i'なしでそれを使う方法はありませんか? – Alex

+0

しかし、 'foreach($ searchResults ['_ cars'] [items '] ... ...'ループの中で' print_r($ data) 'を実行するのはなぜですか? – Alex