mrusklon
@mrusklon
Не получается? Яростно гугли!

Как исключить дубли из выдачи в цикле php?

Есть 2 таблицы , в одной ФИО , дата и часы. Во второй даты и "id дня"
циклами сравниваю дату из первой таблицы со второй и если она совпадает в зависимости от "id дня" делаю математические операции с часами из первой таблицы.
Все бы хорошо , но если даты во второй таблице нет (последний else if в коде) , тоже нужно провести математику , но в этом моменте выходит огромное количество дублей
как исключить дубли?

написал такой код:
$output = '';
                    foreach ($result as $row) { //здесь делаем двумерный массив
                        foreach ($result_days as $row_days) {
                            if ($row['date'] === $row_days['off_date'] && $row_days['off_id'] == 0) { //если выходной
                                // echo '<span>Выходной день</span><br>';
                                $sub_hours = (int)$row['sub_hours'];
                                $output = '
                        <tr>
                            <td>' . $row['name'] . '</td>
                            <td>' . ($sub_hours = $sub_hours - 0) . '</td>
                            <td>' . $row['date'] . '</td>
                            <td>Не рабочий день</td>
                            </tr>';
                                echo $output;
                            } else if ($row['date'] === $row_days['off_date'] && $row_days['off_id'] == 1) { //если сокращенка
                                $sub_hours = (int)$row['sub_hours'];
                                $sub_hours = $sub_hours - 7;
                                if ($sub_hours > 0) {
                                    $output = '
                        <tr>
                         <td>' . $row['name'] . '</td>
                         <td>' . $sub_hours . '</td>
                         <td>' . $row['date'] . '</td>
                         <td>Сокращенный день</td>
                         </tr>';
                                    echo $output;
                                }

                            } else if ($row['date'] != $row_days['off_date']) { // рабочие дни
                                $sub_hours = (int)$row['sub_hours'];
                                $sub_hours = $sub_hours - 8;
                                if ($sub_hours > 0) {
                                    $output = '
                        <tr>
                        <td>' . $row['name'] . '</td>
                         <td>' . $sub_hours . '</td>
                         <td>' . $row['date'] . '</td>
                        <td>Рабочий день</td>
                        </tr>';
                                    echo $output;
                                }

                            }
                        }

                    }
  • Вопрос задан
  • 258 просмотров
Решения вопроса 2
@Vitsliputsli
Так вы ведь выполняете последний else if практически для всех элементов массива. Если не менять текущую реализацию, вынесите это условие из под второго foreach и замените условие на проверку флага, флаг соответственно того, что после прохождения второго foreach не было совпадений.
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Вот код:
$output = '';
                    foreach ($result as $row) { //здесь делаем двумерный массив
                        $found = false;
                        foreach ($result_days as $row_days) {
                            if ($row['date'] === $row_days['off_date'] && $row_days['off_id'] == 0) { //если выходной
                                $found = true;
                                // echo '<span>Выходной день</span><br>';
                                $sub_hours = (int)$row['sub_hours'];
                                $output = '
                        <tr>
                            <td>' . $row['name'] . '</td>
                            <td>' . ($sub_hours = $sub_hours - 0) . '</td>
                            <td>' . $row['date'] . '</td>
                            <td>Не рабочий день</td>
                            </tr>';
                                echo $output;
                            } else if ($row['date'] === $row_days['off_date'] && $row_days['off_id'] == 1) { //если сокращенка
                                $found = true;
                                $sub_hours = (int)$row['sub_hours'];
                                $sub_hours = $sub_hours - 7;
                                if ($sub_hours > 0) {
                                    $output = '
                        <tr>
                         <td>' . $row['name'] . '</td>
                         <td>' . $sub_hours . '</td>
                         <td>' . $row['date'] . '</td>
                         <td>Сокращенный день</td>
                         </tr>';
                                    echo $output;
                                }
                            }
                        }
                        if (!$found) { // рабочие дни
                                $sub_hours = (int)$row['sub_hours'];
                                $sub_hours = $sub_hours - 8;
                                if ($sub_hours > 0) {
                                    $output = '
                        <tr>
                        <td>' . $row['name'] . '</td>
                         <td>' . $sub_hours . '</td>
                         <td>' . $row['date'] . '</td>
                        <td>Рабочий день</td>
                        </tr>';
                                    echo $output;
                                }
                            }
                    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы