2017-02-28 60 views
0

我想从表单数据生成json。这是我的:Array 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" 
}, 

等等什么是最好的方法来解决这个问题?我很可能不会想对..

+1

正如你已经知道你覆盖你的数组键每次迭代。你可能想这样做:'$ accounts [] = [“Username”=> trim($ split [0]),“Passowrd”=> $ split [1]];'我也建议你把'print_r($ accouns);'放到你的foreach循环中,然后一次,然后用你现在的代码和上面提到的代码更改来完成,看看它们的区别。 – Rizier123

回答

1

array_map一个functional方式(也只不过是一个隐含的循环更多)

$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); 
+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

看看我的评论:http://stackoverflow.com/questions/42519821/array-explode-json#comment72176678_42519821如果你有一点重写代码,你不必使用'$ key'变量。同时展示'$ accounts'数组如何随着代码和OP代码的变化而变化,可以更好地将你在代码中改变的内容以及发生的事情形象化。 – Rizier123

+0

谢谢!它的工作:)知道它会是这样的东西..:l –