I Everyone我目前正在为Joomla 2.5创建一个使用jvectormap的组件,由于某种原因,我得到了json中的所有大陆和国家,但只有最新增加的公司,而不是旧公司...我认为这可能与我的foreach声明有关......但是并不是非常确定:
我的模型文件:
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;
}
然后是回显数组的部分我的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中它只返回最新的公司而不是全部...
请不要犹豫,询问是否需要进一步的详细信息..任何帮助都非常贬值。谢谢:))
答案 0 :(得分: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']
将成为列出所有公司的索引数组。
答案 1 :(得分: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
);
};