2013-04-29 86 views
0

我每個人我目前正在創建一個組件使用jvectormap的Joomla 2.5,由於某種原因,我得到了所有的大陸和國家json,但只有最新增加的公司,而不是舊的的...我認爲這可能與我的foreach語句做......但是真的不知道在所有誠實:PHP foreach覆蓋結果Joomla 2.5

我的模型文件:

public function getLand() 
{ 
$land_id = JRequest::getInt('id'); 

$db = $this->getDbo(); 
$query = $db->getQuery(true); 

$query->select('*, a.continent_name,continent_facts'); 
$query->from('#__vectormap_countries AS t') 
     ->join('LEFT', '#__vectormap_continents AS a USING(continent_id)') 
     ->where('t.published = 1'); 

$db->setQuery($query); 

$rows = $db->loadObjectList(); 

return $rows; 
} 

public function getFirm(){ 
    $firm_id = JRequest::getInt('id'); 

    $db = $this->getDbo(); 
    $query = $db->getQuery(true); 

    $query->select('*'); 
    $query->from('#__vectormap_firms AS t') 
      ->where('t.published = 1'); 

    $db->setQuery($query); 

    $firms = $db->loadObjectList(); 

    return $firms; 
} 

,然後一部分被echo'ing我的view.json.php數組:

public function display($tpl = null) 
{ 
$land = $this->get('Land'); 
$firm = $this->get('Firm'); 
$response = array(); 

foreach ($land as $row) { 
     $response[$row->country_code] = array(
        'path' => $row->country_svgpath, 
        'name' => $row->country_name, 
        'continent' => $row->continent_name, 
        'fact' => $row->continent_facts 
     ); 
}; 

foreach ($firm as $firms) { 
     $response['firms'] = array (
      'firm_name' => $firms->firm_companyname, 
      'firm_latitude' => $firms->firm_latitude, 
      'firm_longitude' => $firms->firm_longitude 
      ); 
     }; 
echo json_encode($response); 
} 

,並在第一的foreach返回的一切,但在第二的foreach它只返回最新的公司不是所有的人..

請不要猶豫,問是否需要進一步詳細..任何幫助非常Apreciated 。謝謝:)

回答

1

更改第二回路:

$response['firms'] = array(); 
foreach ($firm as $firms) { 
     $response['firms'][] = array (
      'firm_name' => $firms->firm_companyname, 
      'firm_latitude' => $firms->firm_latitude, 
      'firm_longitude' => $firms->firm_longitude 
      ); 
     }; 

有了這個,$response['firms']將是一個索引數組,列出所有的公司。

+0

非常感謝你..完美工作 – 2013-04-29 18:05:02

0

在第二個foreach中的關鍵是固定的,因爲$response['firms'],所以後面的運行將覆蓋更早的。你可以嘗試這樣的事情:

foreach ($firm as $firms) { 
    $response[$firms->firm_companyname] = array (
     'firm_latitude' => $firms->firm_latitude, 
     'firm_longitude' => $firms->firm_longitude 
     ); 
    }; 

,這將給你的公司名稱作爲重點 - 你需要將改變環路的每次運行的東西。你也可以有一個遞增的整數:

$firmcount = 0; 
foreach ($firm as $firms) { 
    $response['firms' . $firmcount++] = array (
     'firm_name' => $firms->firm_companyname, 
     'firm_latitude' => $firms->firm_latitude, 
     'firm_longitude' => $firms->firm_longitude 
     ); 
    };