数组爆炸 json

Array explode json

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

等等等等。解决这个问题的最佳方法是什么?我可能想的不对..

$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 时显示循环的最后一个元素。在添加键时,您将值映射到一个新的多维数组。

A functional way with 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);