【问题标题】:Check if any of the value in resultant array similar to values of existing array with codeigniter检查结果数组中的任何值是否与使用 codeigniter 的现有数组的值相似
【发布时间】:2019-01-29 15:36:54
【问题描述】:

我真的需要帮助来显示月份列表视图,其中收到存款的月份应该是绿色的,没有存款的月份应该是红色的。 我一直在比较数组值。我正在使用 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、Book_number、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 年 9 月和 2018 年 10 月的数据,这 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 年 9 月和 2018 年 10 月,我没有为这 2 个值获得绿色,而是为谁获得了绿色 li 元素。没有找到我做错的地方。

This is the Current page view which I am getting, Actually I am expecting a calendar view with 2 green fields for 2018-Sep and 2018-Oct and all other fields in Red

在数组中执行 Var Dumb:

Pls check this screenshot

仅供参考: 下面是我从中获取 $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 的表中获取的。

再次感谢。

【问题讨论】:

  • 我没能理解你需要什么。你能试着创建一个简单的例子吗?我相信使用array_diff 或类似的东西可能会对您有所帮助
  • 嘿@dWinder,假设我已经打印了一个带有几个值的数组,这里说'$days [] = 2018-Sep,2018-October,2018-November,2018-December'和这个数组静态意味着,不从任何数据库中获取。现在假设我有一个名为“Accounts”的表,它有一个名为“deposit_month”的字段。现在我将这个表列“deposit_month”提取到我的行中。显然,这将显示发布到 deposit_month 的所有数据。所以如果我有 deposit_month[] = 2018-September, 2018-October.
  • 在我的情况下,数组差异将是 2018 年 11 月和 2018 年 12 月,对吧?因此,如果我尝试使用 foreach 显示所有 4 个月的 $days[],现在我想检查 deposit_month 中的任何值是否等于 $days 的任何值,那么特定值应该变成绿色或其他东西为突出显示。这基本上是为了检查客户在给定的日期[]中是否有任何存款到期。希望你能得到我的问题。虽然我解释不好。 ;)
  • 您能否在更新后的代码中将$days$depM_arrayvar_dump 发布在for-loop 之前?也许我遗漏了一些东西,但看起来您的 li 元素是在 循环之后定义的 - 您不是每天都想要 li 元素吗?
  • 天哪!... 经过 3 天的漫长实验后,它开始工作了。我本可以早点发布这篇文章以节省我的时间。非常感谢伙计。你真的很摇滚..

标签: php arrays codeigniter compare


【解决方案1】:

您可以使用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";

【讨论】:

    猜你喜欢
    • 2020-05-27
    • 2017-07-31
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 2013-01-27
    • 2012-05-20
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多