2017-08-27 82 views
-1

我有一個用戶輸入數組。在數據庫中保存兩個數組數據

樣品要求:

{ 
    "request": { 
     "phone_number": [ "0321553678", "0321444" ], 
     "amount": [ "10", "20" ] 
    } 
} 

我需要把它保存在數據庫中。數組中的第一個phone_number(03215536​​78)與數量數組中的第一個amount(10)一起,等等。

我已經嘗試循環如下,但我不知道如何循環兩個輸入。它不以這種方式工作。

$data = request(['amount', 'phone_number'); 

foreach($data as $input) 
{ 
    Transaction::create([ 
     'amount' => $input->amount, 
     'phone_number' => $input->phone_number, 
    ]); 

兩個amountphone_number來作爲與對應它們的索引陣列。

有人嗎?

回答

1

在簡單的PHP,你必須使用foreach循環

foreach($array as $key => $value) {} 

的「重點」部分,你會得到指數的陣列中$key可變電流$value

$array = ['a','b','c']; 
$array2 = [10, 20, 30]; 

foreach($array as $index => $char) { 
    echo $char + " => " + $array2[$index] // => "a => 10" 
} 
-1

如果$data的結構保持不變,如它總是會在形式request(['amount', 'phone_number'),您可以將其拆分成2個不同的陣列,像這樣

$amount = $data[1]; 
$phone = $data[0]; 

foreach ($phone as $inputPhone){ 
    foreach($amount as $inputAmount) { 
     Transaction::create([ 
     'amount' => $inputAmount, 
     'phone_number' => $inputPhone, 
    ]); 
    } 
} 

我希望這有助於!

0

既然你在這裏給了json數據,我會這樣做。

$data = json_decode('{"request":{"phone_number":["0321553678","0321444"],"amount":["10","20"]}}'); 

$phoneNumbers = $data->request->phone_number; 
$amount = $data->request->amount; 

$map = array_combine($phoneNumbers, $amount); 

foreach ($map as $phoneNumber => $amount) { 
    Transaction::create([ 
     'amount' => $amount, 
     'phone_number' => $phoneNumber 
    ]); 
} 

可能有更有效的方式來做到這一點,或者用較少的代碼行,但我的初始本能是把兩個陣列到變量,並且使每一個對應的鍵/值陣列(使用array_combine ),因爲它的可讀性和可理解性。

希望有所幫助。

編輯:我不確定Transaction類是什麼,但由於它是靜態的,所以方法似乎需要一個數組,但很可能您可以將整個「數據集」傳遞給它。我提出這個問題的原因是,如果它正如名稱所示創建一個事務,那麼您可能希望保存「全部或全部」,並且如果任何值不正確,就會使事務回滾驗證等等需要思考的東西。

0

如果您不需要指數,你可以

$db->bind('data',serialize($data)); 
$db->query('insert into ...'); 

否則,您可以通過數組進行迭代,並把它放在正確的順序各領域的數據庫內的信息。

// parse 
$requests = array(); 
foreach($data as $value_1) { 
foreach($value as $value_2) { 
    $requests[] = ... 
) 
} 
} 

然後插入請求。

你也可以考慮不同的結構化數據:

{ 
"request": 
[ 
    {"phone_number":"0321553678","amount":"10"}, 
    {"phone_number":"0321444","amount":"20"} 
] 
} 

對不起,是突然中斷......我希望幫助。