如何在laravel中转换$request格式

发布时间:2021-02-25 08:11

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

我有这种格式的数据:

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]];
    }
}

但没有成功

回答1
$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"}]
回答2

你反其道而行之。您需要先循环行(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 表单中 <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 中进行这样的数组转置。提交表单后,您就已经获得了上面预期的数组结构。但这只是我的假设。

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