Php 如何更改键以使用循环将多维数组保存到DB中?
我有一个包含多行数据的表单,其中每行都有相同类型的数据。因此,每行都有“ID”、“名称”、“注释”、“状态” 我的表格是这样的。即使你不了解拉威尔,也很明显发生了什么:Php 如何更改键以使用循环将多维数组保存到DB中?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个包含多行数据的表单,其中每行都有相同类型的数据。因此,每行都有“ID”、“名称”、“注释”、“状态” 我的表格是这样的。即使你不了解拉威尔,也很明显发生了什么: <td>{!!Form::text("cat_id[$category->category_id]", $category->category_id) !!}</td> <td>{!! Form::text("cat_name[$category->category_id
<td>{!!Form::text("cat_id[$category->category_id]", $category->category_id) !!}</td>
<td>{!! Form::text("cat_name[$category->category_id]",$category->name)!!}</td>
<td>{!! Form::textarea("notes[$category->category_id]",$category->notes)!!}</td>
<td>{!! Form::select("status[$category->category_id]", ['active'=>'Active' ,'deactivate' => 'Deactivate', 'delete' => 'Delete'],$category->status)!!}</td>
因此,使用array_map,我重新格式化了数据,如下所示。我有两个问题:
我不知道如何在所有子数组中将所有键更改为正确的标签。例如“ID”、“Name”、“Notes”、“Status”
为了保存数据,我假设我需要遍历每个子数组,并通过DB理解的特定键识别值,例如“ID”、“Name”、“Notes”等。我还想知道实现这一点的最佳方法。非常感谢
array:4 [▼
0 => array:4 [▼
0 => "42"
1 => "Cedar"
2 => "Notes"
3 => "active"
]
1 => array:4 [▼
0 => "22"
1 => "Asphalt"
2 => "Notes"
3 => "active"
]
2 => array:4 [▶]
3 => array:4 [▶]
]
您定义表单字段的方式让您的生活变得非常困难。更改表单字段,以便以更好的格式发布数据
<td>{!! Form::text("category[$category->category_id]['category_id']", $category->category_id) !!}</td>
<td>{!! Form::text("category[$category->category_id]['name']", $category->name) !!}</td>
<td>{!! Form::textarea("category[$category->category_id]['notes']", $category->notes)!!}</td>
<td>{!! Form::select("category[$category->category_id]['status']", ['active' => 'Active', 'deactivate' => 'Deactivate', 'delete' => 'Delete'], $category->status) !!}</td>
后续问题
当您不知道数组的索引时,可以使用foreach
循环,而不是使用for
循环
foreach ($array as $key => $value) {
// ...
}
这对您的案例很有效,但是从您最初的问题来看,似乎您正在使用Laravel。因此,因为您想要更新现有的类别模型,我建议您改为以下内容
// Find updated categories by ID and index collection by category ID
$ids = array_keys($request->category);
$categories = Category::whereIn('category_id', $ids)->get();
// Iterate through categories
$categories->each(function ($category) use ($request) {
// Find category attributes in request POST data and update category
$attributes = $request->category[$category->category_id];
$category->update($attributes);
});
您的复制粘贴将类别id与名称Good spot结合在一起。干杯,太棒了!非常感谢!在您的示例中,子类别按照顺序很好地标记,从1开始,然后是2等。在我的示例中,子数组可以以随机数开始,比如42,然后是35等。我需要能够将这些子数组中的每一个都保存到我的数据库中。因此,在解析数组时,使用For循环将不起作用。你能给我一个建议如何最好地解析数组,这样我就可以进入一个sql更新语句了。非常感谢@文斯一世编辑了我的答案,以回答你的后续问题。如果你有什么不明白的,请告诉我。非常感谢!我真幸运,竟然遇到了一位拉威尔收藏专家!但是,我对代码有一个问题。我收到一个错误:“在null上调用成员函数update()。我使用风暴。调试$attributes时,我看到它是一个数组,包含键、“category_id”、“name”、“notes”、“status”及其各自的值。。这也许可以解释为什么$attributes被视为“null”?
foreach ($array as $key => $value) {
// ...
}
// Find updated categories by ID and index collection by category ID
$ids = array_keys($request->category);
$categories = Category::whereIn('category_id', $ids)->get();
// Iterate through categories
$categories->each(function ($category) use ($request) {
// Find category attributes in request POST data and update category
$attributes = $request->category[$category->category_id];
$category->update($attributes);
});