【问题标题】:Array explode json数组爆炸json
【发布时间】:2017-02-28 22:21:11
【问题描述】:

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

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

【问题讨论】:

  • 如您所知,每次迭代都会覆盖数组键。您可能想做这样的事情:$accounts[] = ["Username" =&gt; trim($split[0]), "Passowrd" =&gt; $split[1]]; 另外,我建议您将 print_r($accouns); 放入您的 foreach 循环中,然后在它之后使用您当前的代码并使用我上面建议的代码更改来查看差异.

标签: php arrays json explode


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

【讨论】:

  • 看看我的评论:stackoverflow.com/questions/42519821/… 如果您稍微重写代码,则不必使用$key 变量。还展示了$accounts 数组如何随您的代码和 OP 的代码而变化,这可能会更好地可视化您在代码中所做的更改以及正在发生的事情。
  • 谢谢!它的工作:) 知道它会是这样的.. :l
【解决方案2】:

functionalarray_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);

【讨论】:

  • 这样做的好方法!会用这个! :)
猜你喜欢
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多