在数据库中保存两个数组数据

时间:2017-08-27 20:24:54

标签: php arrays laravel eloquent

我有一个数组中的用户输入。

样品申请:

{
    "request": {
        "phone_number": [ "0321553678", "0321444" ],
        "amount": [ "10", "20" ]
    }
}

我需要将其保存在数据库中。数组中的第一个phone_number(03215536​​78)与数量数组中的第一个amount(10)一起使用,依此类推。

我尝试过如下循环,但我不确定如何循环使用这两个输入。它没有这种方式。

$data = request(['amount', 'phone_number');

foreach($data as $input) 
{
    Transaction::create([
        'amount' => $input->amount,
        'phone_number' => $input->phone_number,
    ]);

amountphone_number都是数组,其索引对应。

任何?

4 个答案:

答案 0 :(得分:1)

在简单的PHP中,您必须使用" key" foreach循环的一部分

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"
}

答案 1 :(得分:0)

由于你在这里提供了json数据,我会做这样的事情。

array_combine

可能有更有效的方法,或者使用更少的代码行,但我最初的本能是将两个数组放入变量,并使每个数组成为相应的键/值数组(使用Transaction )因为它的可读性和可理解性。

希望有所帮助。

编辑:我不确定create类是什么,但由于它的静态from bitcoin import * Alice_private = 1 Alice_public = privtopub(Alice_private) Bob_private = 2 Bob_public = privtopub(Bob_private) #they exchange publics Alice_message=ecdsa_raw_sign(sha256('Hello'), Alice_private) Bob_message = ecdsa_raw_sign(sha256('Hello back'), Bob_private) 方法似乎采用了数组,因此很可能是你可以通过整个数据集'它。我提出这个问题的原因是,如果它,如名称所示,创建一个事务,你可能想要保存"全部或者没有",并且如果任何值不正确则让事务回滚/失败某种内部验证,等等。要考虑的事情。

答案 2 :(得分:0)

如果您不需要按照每个字段索引数据库中的信息

$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"}
 ]
}

抱歉,被突然中断......我希望有所帮助。

答案 3 :(得分:-1)

如果$data的结构保持不变,因为它始终采用request(['amount', 'phone_number')形式,您可以将其拆分为2个不同的数组,如此

$amount = $data[1];
$phone = $data[0];

foreach ($phone as $inputPhone){
    foreach($amount as $inputAmount) {
        Transaction::create([
        'amount' => $inputAmount,
        'phone_number' => $inputPhone,
    ]);
    }
}

我希望这有帮助!