Проверьте, совпадает ли какое-либо значение в результирующем массиве со значениями существующего массива с codeigniter - PullRequest
0 голосов
/ 29 января 2019

Мне действительно нужна помощь для отображения списка месяцев, в котором полученный месяц должен быть зеленого цвета, а месяц без депозита - красным.Я застрял в сравнении значений массива.и я использую codeigniter.

У меня есть таблица с начальной и конечной датами, с помощью которой я создал массив для отображения всех месяцев между этими датами.Пожалуйста, найдите код, который я использовал для этого ниже:

$datefrom = strtotime($showrangecalendar['chitdate_start']);
$dateto = strtotime($showrangecalendar['chitdate_end']);

$start_date = date('Y-m-d', $datefrom);
$end_date =  date('Y-m-d', $dateto);
$day = 2.628e+6; // Day in Months  
$format = 'Y-F'; // Output format (see PHP date funciton)  
$sTime = strtotime($start_date); // Start as time  
$eTime = strtotime($end_date); // End as time  
$numDays = round(($eTime - $sTime) / $day) + 1;  
$days = array();  
for ($d = 0; $d < $numDays; $d++) {  
    $days[] = date($format, ($sTime + ($d * $day)));  
}

Этот код получил мне список Дней, и я отобразил его с помощью оператора foreach в таблице.

Теперь у меня естьдругая таблица (счета) с такими столбцами, как ID, номер_библиотеки, Deposit_Amount и Deposit_Month.Здесь начинается проблема. Я выбрал данные из «учетных записей» и загрузил их, используя приведенный ниже код из контроллера

$data['show_account']= $this->Accounts_model->get_all_accounts($sess_data);

Моя модель (Accounts_Model), как показано ниже:

public function get_all_accounts($id)
{
    $this->db->select("*");
    $this->db->order_by('book_id','desc');
    $this->db->from("accounts");
    $this->db->where('bh_id',$id);
    $query = $this->db->get();
    return $query->result();
}

Если я запускаю следующий код:

foreach($show_account as $values){

  echo $values->deposit_month;
 }

Это дает мне массив результатов всех депозитных месяцев.Предположим, у меня есть данные за 2018-сентябрь и 2018-октябрь. Эти столбцы за 2 месяца должны стать зелеными в вышеупомянутом массиве $ days.

Надеюсь, я четко объяснил свое требование.Пожалуйста, помогите мне с этим, поскольку я уже провел долгие часы в этом.

Заранее спасибо.

Обновлено:

Теперь не могли бы вы проверить мою модель следующим образом:

public function get_dep_month($bh_id)
{
    $this->db->select('deposit_month');
    $this->db->from('accounts');
    $this->db->where('bh_id',$_SESSION['bh_id']);
    $this->db->order_by('deposit_month','asc');
    $query = $this->db->get();
    return $query->result_array();
}

И мой контроллер выглядит следующим образом:

$sess_data = $this->session->userdata('bh_id');
    $data['depM_array'] = $this->Accounts_model->get_dep_month($sess_data);

Теперь, пожалуйста, проверьте мой вид следующим образом:

 <?php

                // option 2
                foreach($days as $day) { // using your already exist $day for-loop for display
                    if (!in_array($day, $depM_array)){
                       $calhilight = "calgreen";
                    }
                    else{
                      $calhilight = "calred";
                    }

            ?>
              <li class="<?php echo $calhilight; ?>"><?= $day ?></li>
            <?php      
                }
            ?>

Но так как мой столбец doposit_month имеет только 2 значениято есть: 2018-сентябрь и 2018-октябрь. Вместо того, чтобы получить зеленый цвет для этих двух значений, я получаю Зеленый для элемента li .Не понимаю, где я поступил неправильно.

Это текущее представление страницы, которое я получаю. На самом деле я ожидаю представления календаря с двумя зелеными полями на 2018-сентябрь и 2018-октябрь и все остальныеполя в красном

Выполнено Var Dumb в массивах:

Просьба проверить этот снимок экрана

К вашему сведению: Ниже приведен код, откуда яполучение массива $ days.

 <?php    
$datefrom = strtotime($showrangecalendar['chitdate_start']);
$dateto = strtotime($showrangecalendar['chitdate_end']);

$start_date = date('Y-m-d', $datefrom);
$end_date =  date('Y-m-d', $dateto);
$day = 2.628e+6; // Day in Months  
$format = 'Y-F'; // Output format (see PHP date funciton)  
$sTime = strtotime($start_date); // Start as time  
$eTime = strtotime($end_date); // End as time  
$numDays = round(($eTime - $sTime) / $day) + 1;  
$days = array();  
for ($d = 0; $d < $numDays; $d++) {  
    $days[] = date($format, ($sTime + ($d * $day)));  
}

?>

Здесь $ start_date & $ end_date извлекается из другой таблицы с именем chitdate.

Еще раз спасибо.

1 Ответ

0 голосов
/ 29 января 2019

Вы можете использовать array-diff или простой for-loop.

Рассмотрим следующий простой пример:

$days = array("2018-September", "2018-October", "2018-November", "2018-December");
$deposit_month = array("2018-September", "2018-October");

// option 1:
$diff = array_diff($days, $deposit_month);
// now $diff has: "2018-November" and "2018-December"

// option 2
foreach($days as $day) { // using your already exist $day for-loop for display
    if (!in_array($day, $deposit_month))
        // color in red as not found in "deposit_month"
    else 
        // color in green
}

Более приятное написание для этой if банкибыть как:

$color = in_array($day, $deposit_month) ? "Green" : "Red";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...