Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何更改键以使用循环将多维数组保存到DB中?_Php_Arrays_Multidimensional Array - Fatal编程技术网

Php 如何更改键以使用循环将多维数组保存到DB中?

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

我有一个包含多行数据的表单,其中每行都有相同类型的数据。因此,每行都有“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); 
});