【问题标题】:Save two array data in database在数据库中保存两个数组数据
【发布时间】:2017-08-27 20:24:53
【问题描述】:

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

示例请求:

{
    "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 都以数组形式出现,它们的索引对应。

有人吗?

【问题讨论】:

    标签: php arrays laravel eloquent


    【解决方案1】:

    在简单的 PHP 中,您必须使用 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"
    }
    

    【讨论】:

      【解决方案2】:

      既然你在这里给了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
          ]);
      }
      

      可能有更有效的方法可以做到这一点,或者代码行数更少,但我最初的直觉是将两个数组放入变量中,并使每个数组成为对应的键/值数组(使用array_combine),因为它易于阅读和理解。

      希望对您有所帮助。

      编辑:我不确定 Transaction 类是什么,但由于它是静态的 create 方法似乎需要一个数组,因此您很可能可以将整个“数据集”传递给它。我提出这个的原因是因为如果它,顾名思义,创建一个事务,你可能想要保存“全部或无”,如果任何值不正确/失败某种内部,则让事务回滚验证等。需要考虑的事情。

      【讨论】:

        【解决方案3】:

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

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

        抱歉,被突然打断了……希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 2014-04-28
          • 2012-05-28
          • 1970-01-01
          • 1970-01-01
          • 2021-11-01
          • 1970-01-01
          • 2013-10-05
          • 1970-01-01
          相关资源
          最近更新 更多