codeigniter没有使用for循环获得正确的值

时间:2014-04-24 10:37:02

标签: php codeigniter

我正在努力在for循环中获得正确的值。

这是我从控制器传递到视图的数据

 $data['moisString'] = $moisString;
 //result of var_dump
 var_dump($data['moisString'] );
        array (size=3)
           0 => string 'Janvier' (length=7)
           1 => string 'Février' (length=8)
           2 => string 'Mars' (length=4)

 $data['year'] = $year;
 //result of var_dump
 var_dump($data['year'] );
        array (size=3)
           0 => int 2014
           1 => int 2014
           2 => int 2014

在我看来我有一个form_dropdown,我希望得到类似的东西:

****************
* Janvier 2014 *
* Février 2014 *
* Mars 2014    *
**************** 

这是视图:

echo form_open('suivrePaiement/view', 'method="get"');

$month = array();
$annee = array();

for ($i = 0; $i < count($moisString); $i++) {
     $month[] = $moisString[$i];
     $annee[]= $year[$i];
           foreach ($ficheFrais as $mois) {
           $options[$mois->mois] = $month[$i]." ".$annee[$i];
           }
    }   

echo form_dropdown('mois', $options, $this->input->get('mois'), 'class="btn btn-default  

dropdown-toggle"');

echo form_hidden('visiteur', set_value('visiteur', $this->input->get('visiteur')));
echo form_submit('', 'Envoyer', 'class="btn btn-info"');

echo form_close();

但这就是我得到的:

*************
* Mars 2014 *
* Mars 2014 *
* Mars 2014 *
*************

有人有解决方案吗?谢谢你的时间!

2 个答案:

答案 0 :(得分:0)

你的foreach应该在循环结束后完成。

最后一个循环是3例如..所以所有选项都会得到相同的$i。因此,您将在代码中覆盖$options三次。

for ($i = 0; $i < count($moisString); $i++) {
     $month[] = $moisString[$i];
     $annee[]= $year[$i];
}

$counter = 0;
foreach ($ficheFrais as $mois) {
    $options[$mois->mois] = $month[$counter]." ".$annee[$counter++];
}  

答案 1 :(得分:0)

使用array_map来清理你的手。

把它放在你的控制器上:

$options = array_map("set_option", $data['moisString], $data['year]);
$data['dropdown'] =  form_dropdown('mois', $options, $this->input->get('mois'), 'class="btn btn-default dropdown-toggle"');

并创建一个函数

function set_option($moisString, $year)
{
return $moisString . ' ' . $year;
}

查看此参考php.net

在您的视图中

只是回显$ dropdown;