2017-08-27 21 views
-1

ユーザー入力が配列にあります。2つの配列データをデータベースに保存します

サンプル要求:

{ 
    "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は、そのインデックスが対応する配列として来ます。

誰でも?シンプルなPHPで

答えて

1

はあなたが現在$valueため$key変数に配列のインデックスを取得しますforeachループ

foreach($array as $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')になりますのように、あなたは、私はこのことができます願っていますので、

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

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

のような2つの異なる配列に分割することができます!一定のままである場合

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を使用して、各1対応するキー/値の配列を(変数に二つの配列を入れて、作ることですなぜなら、それは読みやすく分かりやすいからです。

希望に役立ちます。

編集:私はTransactionクラスが何であるか分かりませんが、静的なので、createメソッドは配列をとっているようですが、それはあなたがそれに全体のデータセットを渡す可能性が高いです。私がこれを引き起こす理由は、名前が示すように、トランザクションを作成する場合、おそらく "すべてまたはなし"を保存し、値のいずれかが間違っていたり、何らかの内部エラーが発生したりするとトランザクションをロールバックしたいからです検証などの何かについて考える。

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"} 
] 
} 

申し訳ありませんが、突然中断されている...私はそれが役に立てば幸い。

関連する問題