【问题标题】:I am having problems with for loop. repeats values in mysql我在使用 for 循环时遇到问题。在mysql中重复值
【发布时间】:2014-11-17 11:30:15
【问题描述】:

我的控制器

for($a=0; $a<count($area_id); $a++)
{
  for($i=0; $i<count($estimated_time); $i++)
   {
      $project_area = new Projectarea;
      $project_area->area_id = $area_id[$a];
      $project_area->project_id = $project->id;
      $project_area->estimated_time = $estimated_time[$i];
      $project_area->save();
    }
}
return Redirect::to('admin');

我的看法

<div class="form-group">
  <label for="select_client">Choose area</label>
     <select class="form-control" name="area_id[]"  multiple="multiple">
     @foreach($area as $row)
        <option class="click" value="{{ $row->id }}" area="{{ $row->id }}">{{$row->area_name}}</option>
     @endforeach
     </select>

    @foreach($area as $row)
      <input class="other" id="{{ $row->id }}" type="text" name="estimated_time[]" placeholder="{{ $row->area_name }}" />
    @endforeach
</div>

mysql 结果。

如果我从多项选择中选择三个值,我会在数据库中得到这个结果

project_id  area_id estimated_time
123           7          0
123           7          2
123           7          3
123           7          4
123           7          0
123           8          0
123           8          2
123           8          3
123           8          4
123           8          0
123           9          0
123           9          2
123           9          3
123           9          4
123           9          0
124           8          0

谢谢

【问题讨论】:

  • 你想要什么样的输出?根据我的理解,您正在使用两个 for 循环,如果找到一个值,另一个循环将以相同的值运行,然后再次使用 prev for 循环执行另一个循环并执行相同操作。
  • 这是一种项目任务的想法。创建项目时,项目的预计时间定义为项目所需的每个区域的时间。我为此准备了三个表,因为它是多对多的关系。例如,这个项目需要 40 小时的 Web 开发、30 小时的设计等。我尝试将两个变量 $estimated_time 和 $area_id 放入一个循环中,我有一个错误未定义偏移量 3。

标签: php for-loop laravel


【解决方案1】:

你的错误是由于双重foreach,你foreach太多时间。

选择 3 个值 = 3 个循环 (for($a=0; $a&lt;count($area_id); $a++)) * 每个估计时间的 n 个循环 (for($i=0; $i&lt;count($estimated_time); $i++))

所以删除第二个 foreach 并通过数组访问 POST:

var_dump($_POST);
for($a=0; $a<count($_POST['area_id']); $a++)
{

    var_dump($_POST['estimated_time'][$_POST['area_id'][$a]]);
    var_dump($_POST['area_id'][$a]);
    echo 'insert';

}

编辑:这是对您的代码的更正,但您的概念仍然错误

【讨论】:

  • 我试过这样,但只有当我从 select 中按升序选择选项时它才有效。否则它会将前一个的值分配或转移到下一个。
  • 为什么要为estimate_time 制作一个数组?你可以这样做 estimated_time[{{ $row-&gt;id }}] 并像这样访问这个值 $_POST['estimated_time'][$_POST['area_id'][$a]]
【解决方案2】:

从您的问题中很难理解,但是,如果我理解正确,您正在尝试根据位置插入项目的估计时间。问题是您实际上不需要内部 for 循环,因为估计时间数组和 area_id 数组实际上具有相同的大小。

请尝试以下代码:

for($i=0; $i<count($area_id); $i++)
{
      $project_area = new Projectarea;
      $project_area->area_id = $area_id[$i];
      $project_area->project_id = $project->id;
      $project_area->estimated_time = $estimated_time[$i];
      $project_area->save();
}
return Redirect::to('admin');

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2019-02-02
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多