我想从表单数据生成json。这就是我所拥有的:
<?php
$data = explode(',', $data);
$accounts = [];
foreach ($data as $split) {
$split = explode(':', $split);
$accounts['username'] = trim($split[0]);
$accounts['password'] = $split[1];
}
var_dump(json_encode($accounts));
问题在于它只执行循环中的最后一个元素。我知道它为什么这样做,但是我忽略了一些事情并且无法做到正确..我希望json成为这个;
{
"Username": "username",
"Password": "username"
},
{
"Username": "username",
"Password": "password"
},
等等。最好的方法是什么?我可能没想错..
答案 0 :(得分:4)
$data = explode(',', $data);
$accounts = [];
foreach ($data as $key=>$split) {
$split = explode(':', $split);
$accounts[$key]['username'] = trim($split[0]);
$accounts[$key]['password'] = $split[1];
}
var_dump(json_encode($accounts));
请参阅更新的代码示例;在原始代码中,每次迭代都会覆盖$ accounts数组,这就是为什么循环的最后一个元素显示在var_dump时。在添加键时,将值映射到新的多维数组。
答案 1 :(得分:1)
使用functional 的array_map
方法(只不过是一个隐式循环):
$data = 'username1:pass1, user2:pass2, uesr3:pass3';
$accounts = array_map(function ($account) {
list($user, $pass) = explode(':', $account);
return [ 'username' => trim($user), 'password' => $pass ];
}, explode(',', $data));
echo json_encode($accounts);