繁体   English   中英

如何将多维数组从视图传递到控制器?

[英]How do you pass a multi dimensional array from view to controller?

很容易将数据从控制器传递到视图。 此外,要将数据从视图传递到控制器,您需要表单标记。 但是,如何从输入表单传递数组? 任何想法的家伙? 这是数组的样子:

$test = array
(
array($employee_id[0],$name[0],$days_worked[0],$overtime_hours[0]),
array($employee_id[1],$name[1],$days_worked[1],$overtime_hours[1]),
array($employee_id[2],$name[2],$days_worked[2],$overtime_hours[2])
);

从我的HTML视图我得到一个输入表单:

<input name="test" type="text" class="form-control" id="test" value="<?php echo $test;?>">

当我到我的模型测试它是否获得数组内的数据:

$this->test = $_POST['test'];
echo $test = $_POST['test'];

我得到的只是一个字符串“数组”。 我无法访问数组内部的内容。 我需要帮助。

您的问题不清楚..您想要将数组传递给您查看,还是将HTML输出传递给INPUT元素? 这是两个不同的东西,因为一个只是在你的应用程序内部传递一个数组(在服务器上),第二个是将它传递给你的表单数据,在浏览器中显示它,然后将表单发送到服务器并获取那里的数据。

对于第一个 - 我认为没有问题,因为传递变量没有问题第二个 - 默认情况下不可能将多维数组传递给表单输入。 因此输入只有1维。 您可以使用某些转换函数传递数据,例如作为JSON字符串

 value="<?php echo json_encode($test);?>"

然后像这样加载它:

   $this->test = json_decode($_POST['test']);

但是我认为这在前端没有意义,因为用户不会理解输入字段中显示的数据。

为了以合乎逻辑的方式,我将数据分成组,然后在更多输入字段中相应地显示,例如

 <input name="test[0][employee_id]" type="text" class="form-control" id="test" value="<?php echo $test[0][0];?>">
 <input name="test[0][employee_name]" type="text" class="form-control" id="test" value="<?php echo $test[0][1];?>">
 <input name="test[0][employee_days_worked]" type="text" class="form-control" id="test" value="<?php echo $test[0][2]?>">
 <input name="test[0][employee_overtime]" type="text" class="form-control" id="test" value="<?php echo $test[0][3];?>">

但做得更好。 通过这种方式,您可以创建将以多维模式发送的信息。 数组到PHP脚本。

正如在另一个答案中所建议的那样,你可以看到var_dump($ test)的结构

数组值不能直接在表单数据中传递。 你应该使用json_encode。 在您的视图文件中

   $encoded_text =  echo json_encode($test);
 <input name="test" type="text" class="form-control" id="test" value="<?php echo $encoded_text ;?>">

现在在你的模型中解码这个

$test = json_decode($test, $assoc = TRUE);

如果在控制器上使用serialize()并在视图上使用unserialize(),则应该能够以相同的方式访问它。 我相信这就是你所要求的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM