0

我每个人我目前正在为使用 jvectormap 的 Joomla 2.5 创建一个组件,出于某种原因,我将所有大陆和国家都放在 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 中,它只返回最新的公司,而不是全部。

请不要犹豫,询问是否需要更多详细信息。非常感谢任何帮助。谢谢 :)

4

2 回答 2

0

第二个 foreach 中的键是固定的, as $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
        );
    };
于 2013-04-29T17:06:50.467 回答
0

将第二个循环更改为:

$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']将是一个列出所有公司的索引数组。

于 2013-04-29T17:07:06.427 回答