我有一个for循环,并将在厕所中形成两个数组
foreach ($data as $key => $value) {
........
........
$user_insert[] = [
'keyy' => $value,
'key' => $value,
....
...
...
];
$someArray1[] = [
/*'user_id' => $insert_id,*/
'key1' => $value1,
'keyy' => $value,
.......
........
];
}
$user_insert[]
数组的计数为4,$someArray1
的计数为15。
在这个for循环之后,我需要将$user_insert
数组数据插入数据库并使用该inserted_id插入下一个数组$someArray1
foreach($user_insert as $insert_user){
$unique_user_insert = array_unique($insert_user);
//dd($unique_user_insert);
$insert_id = DB::table('users')->insertGetId($unique_user_insert);
foreach ($someArray1 as $someArray) {
$someArray['user_id'] = $insert_id;
DB::table('table_name')->insert($someArray);
}
}
所以这里的问题是第二个循环中的数据插入60次(4 * 15)。我只需要插入15行。
数据($someArray1
)来自第一个for循环,但是我需要在第二个for循环中的插入操作之后为该数组添加user_id
。
那么我怎样才能只插入15行。
答案 0 :(得分:0)
我将假设您可以使用$ insert_id值访问$ someArray1以查找相应的用户数据。
foreach($user_insert as $insert_user){
$unique_user_insert = array_unique($insert_user);
$insert_id = DB::table('users')->insertGetId($unique_user_insert);
// Get the user information you need as $someArray1 should be user_id=>data
$userData = $someArray[$insert_id];
$userData['user_id'] = $insert_id;
// No need for an inner loop, just access the necessary properties of the loop you created earlier.
DB::table('table_name')->insert($userData);
}
您的标签表明您也在使用Laravel 5。如果您正在使用雄辩的ORM,可以通过为数据库表创建模型来清除一些插入和ID检索。
答案 1 :(得分:0)
实际上,每次处理$user_insert
中的一行时,都会循环$someArray1
,而不是只获取所需的行。
要理解你需要的路线。尽管我能理解你的代码,我会说最简单(最可读)的方法是使用for
循环,而不是foreach
循环:
for( $i = 0, $iMax = count( $user_insert ); $i < $iMax; ++$i ){
$insert_user = $user_insert[$i];
// Put your `$user_insert` insert code here
$someArray1[$i]['user_id'] = $insert_id;
DB::table('table_name')->insert( $someArray[$i] ); // Note the [$i] here
}
您也可以通过请求索引来执行此操作:
foreach( $user_insert as $i => $insert_user ){
$unique_user_insert = array_unique($insert_user);
//dd($unique_user_insert);
$insert_id = DB::table('users')->insertGetId($unique_user_insert);
// Now use $i requested above :
$someArray1[$i]['user_id'] = $insert_id;
DB::table( 'table_name' )->insert( $someArray1[$i] );
}