2017-07-26 19 views
1

私はデータベースに挿入する前に配列に格納されたこれらの入力データを持っています。PHPで多次元配列をforeach

$regData = array (
    'user_type'  => $_SESSION['user']->user_type, 
    'user_id'   => $_SESSION['user']->id, 
    'child_id'   => $this->input->post('child_name[]'), 
    'tc_id'   => $this->input->post('tc_id'), 
    'tc_sources'  => $this->input->post('tc_sources'), 
    'tc_created_date' => date('Y-m-d H:i:s'), 
); 

配列の$regData用出力:

Array 
(
    [user_type] => parent 
    [user_id] => 5 
    [child_id] => Array 
     (
      [0] => 47 
      [1] => 49 
     ) 

    [tc_id] => 11 
    [tc_sources] => Email 
    [tc_created_date] => 2017-07-26 21:56:57 
) 

私はそれが次のように、テーブル内の別の行に挿入できることを確認するforeachに配列をしようとしています:

foreach ($regData as $k) { 
    foreach ($k as $val) { 
     $newArr[] = array(
      'user_type'  => $val['user_type'], 
      'user_id'   => $val['user_id'], 
      'child_id'   => $val['child_id'], 
      'tc_id'   => $val['tc_id'], 
      'tc_sources'  => $val['tc_sources'], 
      'tc_created_date' => $val['tc_created_date'], 
     ); 
    } 
} 

編集

これは私が欲しい配列形式の出力であるが、すべてが同じ値を持つデータは、私は本当にループの後、正確なデータを取得するために、配列をforeachの方法がわからない:

Array 
(
    [0] => Array 
     (
      [user_type] => 4 
      [user_id] => 4 
      [child_id] => 4 
      [tc_id] => 4 
      [tc_sources] => 4 
      [tc_created_date] => 4 
     ) 

    [1] => Array 
     (
      [user_type] => 4 
      [user_id] => 4 
      [child_id] => 4 
      [tc_id] => 4 
      [tc_sources] => 4 
      [tc_created_date] => 4 
     ) 

) 
+0

なぜ配列のvalsをcsv文字列に連結しないのですか? – ThisGuyHasTwoThumbs

+0

@ThisGuyHasTwoThumbsは 'implode'を使うのと同じ意味ですか? –

+0

yar - これを行うと、IDの配列を23,24,25に変更してから、配列として再び爆発する可能性があります。 – ThisGuyHasTwoThumbs

答えて

0

コードの下に試してみてください、

Array 
(
    [0] => Array 
    (
     [user_type] => parent 
     [user_id] => 5 
     [child_id] => 47 
     [tc_id] => 11 
     [tc_sources] => Email 
     [tc_created_date] => 2017-07-26 16:27:49 
    ) 

    [1] => Array 
    (
     [user_type] => parent 
     [user_id] => 5 
     [child_id] => 49 
     [tc_id] => 11 
     [tc_sources] => Email 
     [tc_created_date] => 2017-07-26 16:27:49 
    ) 

) 

あなたは上記の出力を得るのですか?そうでない場合は、質問とサンプル出力をコメントで記述してください。

+0

それを釘付け!それは私が探しているものです。ありがとうございました! :) –

0

あなたが変数$kを呼び出したので、私はあなたの配列のキーであると仮定したと思いますが、代わりに値になります。

第二の問題は、あなたの配列$regDataにエントリが1つだけ含まれているように見えるということですので、あなたも、これは動作するはずのすべての

であなたのforeachを必要としない:あなたがミスを犯した場合

$newArr[] = array(
     'user_type'  => $regData['user_type'], 
     'user_id'   => $regData['user_id'], 
     'child_id'   => $regData['child_id'], 
     'tc_id'   => $regData['tc_id'], 
     'tc_sources'  => $regData['tc_sources'], 
     'tc_created_date' => $regData['tc_created_date'], 
    ); 

あなたの答えと$regDataが実際に複数のエントリが含まれている中で、これは動作するはずです:

foreach ($regData as $val) { 
    $newArr[] = array(
     'user_type'  => $val['user_type'], 
     'user_id'   => $val['user_id'], 
     'child_id'   => $val['child_id'], 
     'tc_id'   => $val['tc_id'], 
     'tc_sources'  => $val['tc_sources'], 
     'tc_created_date' => $val['tc_created_date'], 
    ); 
} 

使用foreach ($regData as $k => $val) {} ALSへあなたのuser_idは一意の値で提供される

$newArr = array(); 
foreach ($regData as $entry) { 
    foreach ($entry as $key => $val) { 
     $newArr[$entry['user_id']][$key] = $val; 
    } 
} 

$newArr = array(); 
foreach ($regData as $entry) { 
    foreach ($entry as $key => $val) { 
     $newEntry[$key] = $val; 
    } 
    $newArr[] = $newEntry; 
} 

または多分よりよい:Oキーを取得します。

if(!empty($regData['child_id'])) { 
    foreach($regData['child_id'] as $key => $row) { 
     $newArr[$key]['user_type'] = $regData['user_type']; 
     $newArr[$key]['user_id'] = $regData['user_id']; 
     $newArr[$key]['child_id'] = $row; 
     $newArr[$key]['tc_id'] = $regData['tc_id']; 
     $newArr[$key]['tc_sources'] = $regData['tc_sources']; 
     $newArr[$key]['tc_created_date'] = $regData['tc_created_date']; 
    } 
} 

出力は以下の通りです

+0

このforeachを試しましたが、出力が正しくありません。 –

+0

私は、私は間違いを見つけたので、直後に編集し、さらに多くのケースを追加しました。 – ksjohn