【问题标题】:how to convert $request format in laravel如何在 laravel 中转换 $request 格式
【发布时间】:2021-02-25 08:11:06
【问题描述】:

我四处寻找,但没有找到完全符合我追求的东西,也没有找到任何真正帮助我实现我想要的东西

我有这种格式的数据:

array:4 [▼
  "name" => array:2 [▼
    0 => "ty"
    1 => "word"
  ]
  "phone" => array:2 [▼
    0 => "2222222"
    1 => "3333333"
  ]
  "email" => array:2 [▼
    0 => "abc@gmail.com"
    1 => "xyz@gmail.com"
  ]
  "cnic" => array:2 [▼
    0 => "567"
    1 => "234"
  ]
]

我想把它全部转换成这种格式:

   [
  {
    "name" => "ty"
    "phone" => "2222222"
    "email" => "abc@gmail.com"
    "cnic" => "567"
  },
  {
    "name" => "word"
    "phone" => "3333333"
    "email" => "xyz@gmail.com"
    "cnic" => "234"
  }
]

我试过了:

foreach ($array as $key => $value) {
    $x = count($array[0]["name"]);
    for ($i=0; $i < $x; $i++) { 
        $newArray[] = [$value["name"][$i], $value["phone"][$i], $value["email"][$i] ,$value["cnic"][$i]];
    }
}

但没有成功

【问题讨论】:

    标签: php arrays laravel


    【解决方案1】:

    反之亦然。您需要先循环行(0 和 1),然后在每一列(姓名、电话、电子邮件、cnic)中循环每个值:

    $newArray = [];
    $count = count($array['name']);
    for ($i = 0; $i < $count; $i++) {
        $temp = [];
        foreach (array_keys($array) as $key) {
            $temp[$key] = $array[$key][$i] ;
        }
        $newArray[] = $temp;
    }
    

    或者使用array_combine + array_keys + array_column 也可以:

    $newArray = [];
    for ($i = 0, $count = count($array['name']); $i < $count; $i++) {
        $newArray[] = array_combine(array_keys($array), array_column($array, $i));
    }
    

    Sample Output

    旁注:如果这来自表单,我认为这是您的 html 表单中 &lt;input name="name[]" 的经典案例。

    如果你遵循这种结构:

    <form>
        <div class="form-group">
            <input name="input[0][name]" />
            <input name="input[0][email]" />
            <input name="input[0][phone]" />
            <input name="input[0][cnic]" />
        </div>
    
        <div class="form-group">
            <input name="input[1][name]" />
            <input name="input[1][email]" />
            <input name="input[1][phone]" />
            <input name="input[1][cnic]" />
        </div>
    </form>
    

    你不需要在 PHP 中做这样的数组转置。提交表单后,您已经获得了上述预期的数组结构。但这只是我的一个假设。

    如果它不是来自表单,请随意忽略此边注。

    【讨论】:

      【解决方案2】:
      $array = [
        "name" => [
          0 => "ty",
          1 => "word"
        ],
        "phone" => [
          0 => "2222222",
          1 => "3333333"
        ],
        "email" => [
          0 => "abc@gmail.com",
          1 => "xyz@gmail.com"
        ],
        "cnic" => [
          0 => "567",
          1 => "234"
        ],
      ];
      $newArray = [];
      foreach ($array["name"] as $key => $value) {
          $name = $array["name"][$key];
          $phone = $array["phone"][$key];
          $email = $array["email"][$key];
          $cnic = $array["cnic"][$key];
          $myarray = array("name"=>$name, "phone"=>$phone, "email"=>$email, "cnic"=>$cnic);
          array_push($newArray, $myarray);
      }
      var_dump(json_encode($newArray))
      

      输出:

      [{"name":"ty","phone":"2222222","email":"abc@gmail.com","cnic":"567"},{"name":"word","phone":"3333333","email":"xyz@gmail.com","cnic":"234"}]
      

      【讨论】:

        猜你喜欢
        • 2021-08-06
        • 1970-01-01
        • 2023-02-07
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 2020-05-31
        • 2021-07-08
        • 2018-02-01
        相关资源
        最近更新 更多