2016-08-27 6 views
-1

プロバイダからデータを取得する必要があるアプリがあります。 これは私がデータベースにいくつかのデータを持っており、衣装のMVCモデルでモデルをロードし、配列(assoc)内のすべてのデータを取得しようとしています。php foreachループは最後の要素のみを返しますか?

私はリストにすべてを収集し、クラスからコントローラにリストを渡したいと思います。

私はこれまでこのクラスの他のパラメータについてこれまで行ってきましたが、今は収集したいときに最後のレコードを返します。ここ

はコードです:

public function getDetails() 
{ 

    $provider = []; 

    $provider['local']['images'] = $this->loadModel('images')->getProviderImages($this->provider_id); 
    $provider['local']['applications'] = $this->loadModel('images')->getProviderApplications($this->provider_id); 
    $provider['local']['plans'] = $this->loadModel('plans')->getProviderPlans($this->provider_id); 
    $provider['local']['dataCenters'] = $this->loadModel('regions')->getProviderRegions($this->provider_id); 
    $provider['local']['snapshots'] = $this->loadModel('snapshots')->getProviderSnapshots($this->provider_id); 

    try { 
     $provider['remote']['images'] = $this->getImages()->images; 
     $provider['remote']['plans'] = $this->getPlans()->plans; 
     $provider['remote']['dataCenters'] = $this->getDataCenters()->data_centers; 

     if (!$provider['remote']['images'] || !$provider['remote']['plans'] || !$provider['remote']['dataCenters']) { 
      throw new Exception ("Can't connect to provider. creating provider details array failed!"); 
     } 
    } catch (Exception $e) { 
     log_error($e); 

     return false; 
    } 
    /***********/ 


    $temp = []; 
    foreach ($provider['local']['images'] as $key => $image) { 
     foreach ($provider['remote']['images'] as $r_key => $r_image) { 
      if ($image['is_active'] == true) { 
//        r($r_image); 

if ($image['slug'] == $r_image['slug']) { 
        $temp['images'][$image['os_name']]['name'] = $image['name']; 
        $version = $image['os_version']; 
        $version .= (!empty($image['os_architecture'])) ? '-' . $image['os_architecture'] : ''; 
        $temp['images'][$image['os_name']]['versions'][$version] = $image; 
        $temp['images'][$image['os_name']]['versions'][$version]['dataCenters'] = $r_image['regions']; 

        if ($image['image_id'] != $r_image['id']) { 
         $this->loadModel('images')->updateImageID($this->provider_id, $image['slug'], $r_image['id']); 
        } 
        break; 
       } 
      } 
     } 
    }//die(r($temp)); 
    foreach ($provider['local']['snapshots'] as $key => $snapshot) { 
     foreach ($provider['remote']['images'] as $r_key => $r_image) { 
      if ($snapshot['snapshot_id'] == $r_image['id']) { 

       $temp['snapshots'][$r_image['distribution']] = $r_image; 
       $temp['snapshots'][$r_image['distribution']]['service_provider'] = $snapshot['service_provider_id']; 
       $temp['snapshots'][$r_image['distribution']]['os_name'] = strtolower($r_image['distribution']); 

       break; 
      } 
     } 
    }//die(r($temp)); 





     foreach ($provider['local']['applications'] as $key => $app) { 
      foreach ($provider['remote']['images'] as $r_key => $r_image) { 
       if ($app['is_active'] == true) { 

//    r($r_image); 
        //echo "{$image['image_id']} == {$r_image->id} | "; 
        if (empty($r_image['slug'])) { 
         if ($app['image_id'] == $r_image['id']) { 
          $temp['applications'][$app['app_name']]['name'] = $app['name']; 
          $temp['applications'][$app['app_name']]['os'][$app['os_name']][$app['os_version'] . '-' . $app['os_architecture']] = $app; 
          $temp['applications'][$app['app_name']]['os'][$app['os_name']][$app['os_version'] . '-' . $app['os_architecture']]['dataCenters'] = $r_image['regions']; 
          break; 
         } 
        } elseif ($app['slug'] == $r_image['slug']) { 
         $temp['applications'][$app['app_name']]['name'] = $app['name']; 
        $temp['applications'][$app['app_name']]['os'][$app['os_name']][$app['os_version'] . '-' . $app['os_architecture']] = $app; 
        $temp['applications'][$app['app_name']]['os'][$app['os_name']][$app['os_version'] . '-' . $app['os_architecture']]['dataCenters'] = $r_image['regions']; 

        if ($app['image_id'] != $r_image['id']) { 
         $this->loadModel('images')->updateImageID($this->provider_id, $app['slug'], $r_image['id']); 
        } 
        break; 
       } 
      } 
     } 
    }//die(); 


    foreach ($provider['local']['plans'] as $key => $plan) { 
     foreach ($provider['remote']['plans'] as $r_key => $r_plan) { 
      //echo "{$plan['slug']} == {$r_plan->slug} | "; 
      if ($plan['slug'] == $r_plan['slug'] && $r_plan['available']) { 
       $temp['plans'][$plan['slug']] = $plan; 
       $temp['plans'][$plan['slug']]['dataCenters'] = $r_plan['regions']; 

       break; 
      } 
     } 
    } 

    // sort by plan's price 
    uasort($temp['plans'], function ($a, $b) { 
     return $a['hourly_price'] > $b['hourly_price']; 
    }); 

    foreach ($provider['local']['dataCenters'] as $key => $dc) { 
     foreach ($provider['remote']['dataCenters'] as $r_key => $r_dc) { 
      //echo "{$dc['slug']} == {$r_dc->slug} | "; 
      if ($dc['slug'] == $r_dc['slug'] && $r_dc['available']) { 
       $temp['dataCenters'][$dc['country']][$dc['city']][$dc['slug']] = $dc; 
       $temp['dataCenters'][$dc['country']][$dc['city']][$dc['slug']]['plans'] = $r_dc['sizes']; 
       $temp['features'][$dc['slug']] = $r_dc['features']; 
       break; 
      } 
     } 
    } 

    return $temp; 
} 

私の問題は、これらの行にあります。

>   foreach ($provider['local']['snapshots'] as $key => $snapshot) { 
>   foreach ($provider['remote']['images'] as $r_key => $r_image) { 
>    if ($snapshot['snapshot_id'] == $r_image['id']) { 
> 
>     $temp['snapshots'][$r_image['distribution']] = $r_image; 
>     $temp['snapshots'][$r_image['distribution']]['service_provider'] = $snapshot['service_provider_id']; 
>     $temp['snapshots'][$r_image['distribution']]['os_name'] = strtolower($r_image['distribution']); 
> 
>     break; 
>    } 
>   } 
>  } 
+0

$ temp ['snapshots'] [$ r_image ['distribution']] = $ r_image; '現在の 'スナップショット'の何らかの識別ですか?同じスナップショットを上書きしています。 – Jeff

+0

良いアイデア、それをチェックさせてください! – nima

+0

見ていますが、分布の名前で分類したいだけで、リストのインデックスになりました!それは本当ですか? – nima

答えて

0

は最後に、私は、私はこのように、インデックスとしていくつかの変数を使用schuould、awnserが見つかりました:

$temp['snapshots'][$snapshot['id']] = $r_image; 

となります。

関連する問題