Php 在数据库中保存两个数组数据
我有一个数组中的用户输入 样本请求:Php 在数据库中保存两个数组数据,php,arrays,laravel,eloquent,Php,Arrays,Laravel,Eloquent,我有一个数组中的用户输入 样本请求: { "request": { "phone_number": [ "0321553678", "0321444" ], "amount": [ "10", "20" ] } } 我需要把这个保存在数据库里。数组中的第一个电话号码(0321553678)与金额数组中的第一个金额一起,依此类推 我试过如下循环,但我不确定如何使用这两个输入进行循环。它不是这样工作的 $data = request(['amount
{
"request": {
"phone_number": [ "0321553678", "0321444" ],
"amount": [ "10", "20" ]
}
}
我需要把这个保存在数据库里。数组中的第一个电话号码(0321553678)与金额数组中的第一个金额一起,依此类推
我试过如下循环,但我不确定如何使用这两个输入进行循环。它不是这样工作的
$data = request(['amount', 'phone_number');
foreach($data as $input)
{
Transaction::create([
'amount' => $input->amount,
'phone_number' => $input->phone_number,
]);
amount
和phone\u number
都是数组,其索引对应
有人吗?在简单的PHP中,必须使用foreach循环的“key”部分
foreach($array as $key => $value) {}
您将在$key
变量中获得当前$value
的数组索引
$array = ['a','b','c'];
$array2 = [10, 20, 30];
foreach($array as $index => $char) {
echo $char + " => " + $array2[$index] // => "a => 10"
}
既然您在这里提供了json数据,我会这样做
$data = json_decode('{"request":{"phone_number":["0321553678","0321444"],"amount":["10","20"]}}');
$phoneNumbers = $data->request->phone_number;
$amount = $data->request->amount;
$map = array_combine($phoneNumbers, $amount);
foreach ($map as $phoneNumber => $amount) {
Transaction::create([
'amount' => $amount,
'phone_number' => $phoneNumber
]);
}
可能有更有效的方法,或者使用更少的代码行,但我最初的直觉是将这两个数组放入变量中,并使每个数组成为相应的键/值数组(使用数组\u combine
),因为它可读且易懂
希望有帮助
编辑:我不确定
事务
类是什么,但由于它是静态的create
方法,似乎需要一个数组,所以很可能可以将整个“数据集”传递给它。我之所以提出这个问题,是因为如果它(如名称所示)创建了一个事务,您可能希望保存“全部或无”,并在任何值不正确/未通过某种内部验证时让事务回滚,如果不需要按每个字段对数据库中的信息进行索引,则
$db->bind('data',serialize($data));
$db->query('insert into ...');
否则,您可以遍历数组并将其按正确的顺序放置
// parse
$requests = array();
foreach($data as $value_1) {
foreach($value as $value_2) {
$requests[] = ...
)
}
}
然后插入请求
<>你也可以考虑用不同的方式构造数据:
{
"request":
[
{"phone_number":"0321553678","amount":"10"},
{"phone_number":"0321444","amount":"20"}
]
}
对不起,被突然打断了。。。我希望这有帮助