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"}
 ]
}
对不起,被突然打断了。。。我希望这有帮助