2017-02-28 85 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 –