从for循环获取一个数组,并在PHP中使用另一个for循环与该数组

时间:2017-11-25 03:38:08

标签: php mysql arrays laravel-5

我有一个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行。

2 个答案:

答案 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] );
    }