我四处寻找,但没有找到完全符合我所追求的东西,也没有找到任何真正帮助我实现我想要的东西
我有这种格式的数据:
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]];
}
}
但没有成功
$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"}]
你反其道而行之。您需要先循环行(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));
}
旁注:如果这来自一个表单,我认为这是您的 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 中进行这样的数组转置。提交表单后,您就已经获得了上面预期的数组结构。但这只是我的假设。
如果它不是来自表单,请随意忽略此旁注。