Массив не дает правильного вывода для цикла foreach

#php #arrays

#php #массивы

Вопрос:

Я не уверен, что означают эти проблемы, поэтому любое предложение будет оценено.

 foreach ($workerdata as $key => $value) {
    $eductions = WorkerCategories::select('Worker_type')->where('Workertype_id','=',$value)->first();
        
    $worker =  $eductions->Worker_type;
    $demo = array($worker);
    print_r($demo);
    $users['worker_category'] = $demo;
}      

exit();
  

Вывод:

 Array
(
    [0] => Apartment Prepping
)
Array
(
    [0] => Carpenter
)
  

Я хочу:

 Array
(
    [0] => Apartment Prepping
)
Array
(
    [1] => Carpenter
)
  

Спасибо вам за это.

Комментарии:

1. Может быть, вы хотите использовать $users['worker_category'][] = $worker; вместо этого.

Ответ №1:

каждый раз, когда вы вызываете array($worker) , это создает новый массив, который не имеет ничего общего с предыдущим, поэтому индекс остается 0 :

 foreach ($workerdata as $key => $value) {
    $eductions = WorkerCategories::select('Worker_type')->where('Workertype_id','=',$value)->first();

    $users['worker_category'][] = $eductions->Worker_type; //push to array worker type.
}      

exit();

print_r($users['worker_category']);

Array
(
    [0] => Apartment Prepping
    [1] => Carpenter
)

  

Ответ №2:

Внутри вашего массива цикла foreach($worker); создает новый массив за итерацию, в результате вы получаете [0] indexd массив.
Для решения этой проблемы вы должны установить значение индекса вручную. Смотрите приведенный ниже код.

 $index=0;
foreach ($workerdata as $key => $value) {
    $eductions = WorkerCategories::select('Worker_type')->where('Workertype_id','=',$value)->first();
        
    $worker =  $eductions->Worker_type;
    $demo = array($index   => $worker);
    print_r($demo);
    $users['worker_category'] = $demo;
}      

exit();

  

Вывод:

 
Array
(
    [0] => Apartment Prepping
)
Array
(
    [1] => Carpenter
)

  

Ответ №3:

Первое, что мы должны сделать здесь

 $workerdata = array_values($workerdata);
  

Таким образом, нам не нужно обращаться к базе данных так много раз. Только один запрос со всеми рабочими идентификаторами, которые у нас есть

 $eductions = WorkerCategories::select(['Worker_type'])->whereIn('Workertype_id',$workerdata)->get();
  

Определите пустой массив для хранения ваших значений

 $user = [];
  

затем просмотрите свои результаты

 foreach($eductions as $eduction){
     $user[] = $education->worker_category;
}
print_r($user);