Как получить значение specifici c внутри foreach l oop и сопоставить его в другом foreach l oop in PHP (codeigniter) - PullRequest
0 голосов
/ 29 мая 2020

У меня есть два (2) цикла foreach с использованием PHP под codeigniter. Они вызывают одну и ту же функцию в контроллере. Я хочу получить значение «брутто_1» на первом l oop, а затем вычесть его из «брутто_2» на втором l oop, чтобы получить «final_gross».

Вот контроллер, который я использую для вызова той же функции (у меня нет проблем с их использованием):

CONTROLLER:
$data['for_first_cutoff'] = $this->MyModel->my_function( $date_start_1, $date_end_1);
$data['for_second_cutoff'] = $this->MyModel->my_function( $date_start_2, $date_end_2 );

MODEL:
public function my_function($getDate_start, $getDate_end){
    $this->db->select('usr.*, att.id, ss.*');
    $this->db->from('usr');
    $this->db->join('att', 'att.id = att.id');
    $this->db->join('ss', 'ss.id = att.comp');
    $this->db->group_by('att.id');
    $this->db->where('att_date >=',$getDate_start);
    $this->db->where('att_date <=',$getDate_end);
    $query  = $this->db->get();

    return $query->result_array();
}

Вот вид (первый l oop).

<!-- first loop -->
<?php foreach ($for_first_cutoff as $emp_1):?>

<?php 

   $num_of_days_1 = '12'; //auto computed based on "start1" and "end" dates1. 
   $salary_cutoff_1 = $emp_1['salary'];
   $gross_1 = $salary_cutoff_1 * $num_of_days_1; 
?>

   <!-- table here-->
   | <?=$emp_1['usr_fname'];?> | <?=$gross_1;?> |


<?php endforeach;?>

(второй l oop) То же содержимое, но мне нужно вычесть валовое_1 к валовому_2, чтобы получить final_gross:

<!-- Second loop -->
<?php foreach ($for_second_cutoff as $emp_2):?>

<?php 
   $num_of_days_2 = '10'; //auto computed based on "start2" and "end" dates2. 
   $salary_cutoff_2 = $emp_2['salary'];
   $gross_2 = $salary_cutoff_2 * $num_of_days_2; 

   $final_gross = $gross_1 - $gross_2;
?>

   <!-- table here-->
  | <?=$emp_2['usr_fname'];?> | <?=$gross_2;?> | <?=$final_gross;?> |


<?php endforeach;?>

HTML выглядит так:

Loop 1
| John Doe | $100 |
| Sarah Doe | $0 |

Loop 2
| John Doe | $50 | $150 |
| Sarah Doe | $2 | $150 | <---- this is wrong. It must be only $2.

Я пробовал использовать подход, описанный в этом [сообщении] ( Как я могу выйти за пределы значения foreach l oop в этой ситуации? ), но я не знаю, как реализовать он использует мою структуру.

1 Ответ

1 голос
/ 29 мая 2020

хорошо - на основе комментариев вы можете попробовать следующее:

создать массив, который сохраняет ваши данные из первого l oop - я использовал как ключ att.id (вероятно, ваш user_id) - и доступ к этому массиву из вашего первого l oop с вашим идентификатором из второго

<!-- first loop -->
<?php 
    $arrGrossData = [];
    foreach ($for_first_cutoff as $emp_1):
?>

<?php 

   $num_of_days_1 = '12'; //auto computed based on "start1" and "end" dates1. 
   $salary_cutoff_1 = $emp_1['salary'];
   $gross_1 = $salary_cutoff_1 * $num_of_days_1; 
   $arrGrossData[$emp_1['att.id']] = $gross_1;
?>

   <!-- table here-->
   | <?=$emp_1['usr_fname'];?> | <?=$gross_1;?> |


<?php endforeach;?>


<!-- Second loop -->
<?php foreach ($for_second_cutoff as $emp_2):?>

<?php 
   $num_of_days_2 = '10'; //auto computed based on "start2" and "end" dates2. 
   $salary_cutoff_2 = $emp_2['salary'];
   $gross_2 = $salary_cutoff_2 * $num_of_days_2; 

   $final_gross = (isset($arrGrossData[$emp_2['att.id']])) ? $arrGrossData[$emp_2['att.id']] - $gross_2 : $gross_2;
?>

   <!-- table here-->
  | <?=$emp_2['usr_fname'];?> | <?=$gross_2;?> | <?=$final_gross;?> |


<?php endforeach;?>
...