Laravel — Могу ли я добавить новый элемент в массив на основе значения » id`, существующего в этом массиве?

#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);