#php #arrays #laravel #eloquent #laravel-8
Вопрос:
array ( 0 =gt; array ( 'courseId' =gt; 14, 'tutorName' =gt; 'admin', ), 1 =gt; array ( 'courseId' =gt; 15, 'tutorName' =gt; 'merl', ), )
var_export($response)
представляет собой массив, подобный приведенному выше. Для каждого courseId
в $response
массиве я хотел также найти sum
points
таблицу «Когда courseId
в $response
массиве существует student_learning
«. После этого я хотел добавить эту сумму точек( $points
) в $response
массив в качестве нового элемента для соответствующего courseId
. Здесь проблема в том, что каждое значение $points
добавляется как новый элемент в каждый набор $response
данных массива,но я хотел, чтобы оно добавлялось только в соответствующий $response
массив courseId
. Как я могу это сделать?
foreach ($response as $key ) { $points=DB::table('student_learning')-gt;groupBy('courseId')-gt;where('courseId',$key['courseId'])-gt;sum('points'); $res = array_map(function($e) use($points,$percent) { $e['points'] = $points; return $e; }, $response); dump($res); }
dump($res)
выдает результат, как показано ниже
array:2 [ 0 =gt; array:8 [ "courseId" =gt; 14 "tutorName" =gt; "admin" "points" =gt; 12 ] 1 =gt; array:8 [ "courseId" =gt; 15 "tutorName" =gt; "me" "points" =gt; 12 ] ] array:2 [ 0 =gt; array:8 [ "courseId" =gt; 14 "tutorName" =gt; "admin" "points" =gt; 3 ] 1 =gt; array:8 [ "courseId" =gt; 15 "tutorName" =gt; "me" "points" =gt; 3 ] ]
dump($res)
снаружи foreach
выдает результат, как показано ниже
array:2 [ 0 =gt; array:8 [ "courseId" =gt; 14 "tutorName" =gt; "admin" "points" =gt; 3 ] 1 =gt; array:8 [ "courseId" =gt; 15 "tutorName" =gt; "me" "points" =gt; 3 ] ]
Ожидаемый/Требуемый Результат:
[ "courseId" =gt; 14 "tutorName" =gt; "admin" "points" =gt; 12 ] [ "courseId" =gt; 15 "tutorName" =gt; "me" "points" =gt; 3 ]
Комментарии:
1. Значит, вам нужно добавлять точки в каждый массив, верно ?
2. @ManojKiranAppathurai да. пожалуйста, посмотрите мой ожидаемый результат. Это то, чего я хотел
3. Можете ли вы совместно использовать обе структуры таблиц
4. @ManojKiranAppathurai я не думаю, что ответ в любом случае будет связан со структурой таблицы
Ответ №1:
Вы можете добавить новый ключ массива во время цикла с помощью foreach
$response = array ( 0 =gt; array ( 'courseId' =gt; 14, 'tutorName' =gt; 'admin', ), 1 =gt; array ( 'courseId' =gt; 15, 'tutorName' =gt; 'merl', ), ); $newResponse = []; foreach($response as $eachResponse){ $points=DB::table('student_learning')-gt;groupBy('courseId')-gt;where('courseId',$eachResponse['courseId'])-gt;sum('points'); $eachResponse['points'] = $points; $newResponse[] = $eachResponse; } dd($newResponse);