数组爆炸json

时间:2017-02-28 22:21:11

标签: php arrays json explode

我想从表单数据生成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"
},

等等。最好的方法是什么?我可能没想错..

2 个答案:

答案 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);