【问题标题】:Looping through multidimensional array in CodeIgniter在 CodeIgniter 中循环遍历多维数组
【发布时间】:2014-08-21 07:29:11
【问题描述】:

如果您有任何建议,请告诉我,因为我完全坚持这一点!真的需要任何帮助。如果我能说得更清楚一些,请告诉我!

我的模特:

Query #1 -- 从会话中检索 CampaignId 列表

public function retrieve_campaign($CompanyId)
    {   
            $this->db->select('*');
            $this->db->from('Campaign');
            $this->db->join('Product', 'Campaign.ProductId=Product.ProductId');
            $this->db->where('Product.CompanyId', $CompanyId); 
            $query = $this->db->get();

            return $query->result_array(); 
    }

查询 #2 -- 收集网站每天的点击次数

    public function week_data($i, $CampaignId, $StartDate) {
            $query = $this->db->query('SELECT COUNT(*) AS MyCount 
            FROM Record 
            WHERE CampaignId = ' . $CampaignId . ' 
            AND DATE(TimeStamp) = ' . $StartDate . ' + interval ' . $i . ' day');
        return $query;
    }

我的控制器: 如您所见,我设置了会话数据,将其插入查询#1。 然后在 foreach 循环中使用该数据来查询 #2 七次(一周中的每一天一次)。然后将此数据存储在数组中 $data['test']

public function index()
{   
    // Set Session Varaible
    $CompanyId = $this->session->userdata('CompanyId'); 
    $StartDate = "'2014-06-23'";

    // Assign query result to array  to be used in view
    $data['campaigns'] = $this->model_record->retrieve_campaign($CompanyId);

    foreach($data['campaigns'] as $item) {
        for($x = 0;$x > 6;$x++) {
            echo $item['CampaignId'];
            $data['test'] = $this->model_record->week_data($x,$item,$StartDate);
        }
    }

    // Load views, pass query result array
    $this->load->view('templates/header');
    $this->load->view('dashboard/index', $data);
    $this->load->view('templates/footer');
} 

我的观点:这就是我遇到问题的地方——我想遍历 CampaignId 的回显它们,然后回显查询 #2 中与该 CampaignId 相关的所有关联数据。

示例:

1) 检索 CampaignId,在一周中的每一天查询每个 CampaignId 7 次,然后在视图上打印类似这样的内容:

广告系列 ID:1 网络点击:55,63,32,39,22,33,61

等等……

请建议会有所帮助,我已经为此工作了 3 天,但碰壁了。 非常感谢大家!


编辑

非常感谢 Scrowler 帮助我完成每一步。工作编辑:

控制器:

public function index()
{   
    // Set Session Varaible
    $CompanyId = $this->session->userdata('CompanyId'); 
    $StartDate = "'2014-06-23'";

    // Assign query result to array  to be used in view
    $data['campaigns'] = $this->model_record->retrieve_campaign($CompanyId);

    foreach($data['campaigns'] as $item) {
        for($x = 0; $x < 7; $x++) {
            $data['CampaignData'][$item['CampaignId']][] = $this->model_record->week_data($x, $item['CampaignId'], $StartDate);
        }
    }
    // Load views, pass query result array
    $this->load->view('templates/header');
    $this->load->view('dashboard/index', $data);
    $this->load->view('templates/footer');
} 

查看:

<?php 
foreach($CampaignData as $campaign_id => $week_data) {
    echo 'Campaign: ' . $campaign_id . ', web hits: ' . implode(', ', $week_data) . PHP_EOL;
}
?>

【问题讨论】:

  • 难道你不能把echo $item['CampaignId']; 放在for 循环之前,然后在每次迭代中检索$data['test'] 的结果后回显它吗?
  • 很遗憾,我无法在控制器中回显。数据必须放回 $data[''] 数组中才能转移到视图中
  • 对,所以把它添加到一个数组中,并使用CampaignId作为key:$data['CampaignData'][$item['CampaignId']][] = $this-&gt;model_record-&gt;week_data($x, $item, $StartDate);
  • 非常感谢您,这真的很有帮助。我已经为我当前的问题更新了我的帖子——我不确定如何格式化 forloop 以在视图上显示我的信息

标签: php mysql arrays codeigniter multidimensional-array


【解决方案1】:

您可以在 for 循环期间将您的周数据添加到一个数组中,由活动 ID 标识为数组键,然后将其传递给您的视图:

foreach($data['campaigns'] as $item) {
    for($x = 0; $x < 7; $x++) {
        $data['CampaignData'][$item['CampaignId']][] = $this->model_record->week_data($x, $item, $StartDate);
    }
}

然后你可以像这样输出你的数据:

foreach($data['CampaignData'] as $campaign_id => $week_data) {
    echo 'Campaign: ' . $campaign_id . ', web hits: ' . implode(', ', $week_data) . PHP_EOL;
}

你当然可以比这更好地格式化你的输出,但是那个例子应该给你你想要的,例如:

广告系列:1,网络点击量:55、63、32、39、22、33、61

【讨论】:

  • 我不能开始感谢你们俩。这对我来说太有见地了。不幸的是,我将代码更改为您的建议,但是,我收到一条消息:为 foreach() 提供的参数无效和消息:未定义变量:数据
  • 您需要更改 $data 变量以反映 CodeIgniter 视图中的变量名称(是 $CampaignData?)我不熟悉 CodeIgniter
  • 有效!我的疏忽 - 将使用完整的编辑代码进行更新。太感谢了!我想我可能会哭。
【解决方案2】:

您的 for 循环语句看起来不正确。如果你想循环7次,把它改成

for($i = 0; $i <= 6; $i++)

你的最终代码应该是这样的

foreach($data['campaigns'] as $item) {
    $data[$item['CampaignId']] = array();
    for($x = 0;$x <= 6;$x++) {
        $data[$item['CampaignId']][] = $this->model_record->week_data($x,$item,$StartDate);
    }
}

【讨论】:

  • 这将给你 8 次重复 - 将 &lt;= 换成 &lt; 以获得 7 天,或者将 $x 从一开始而不是零开始
猜你喜欢
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多