php - 检查结果数组中的任何值是否与使用 codeigniter 的现有数组的值相似
问题描述
我真的需要帮助来显示月份列表视图,其中收到的存款月份应该是绿色的,没有存款的月份应该是红色的。我一直在比较数组值。我正在使用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)));
}
此代码为我提供了 Days 列表,我已使用 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 个值获得绿色,而是为谁获得了绿色元素获得了绿色。没有得到我做错的地方。
这是我得到的当前页面视图,实际上我期待一个日历视图,其中包含 2018 年 9 月和 2018 年 10 月的 2 个绿色字段以及红色的所有其他字段
在数组中执行 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 的表中获取。
再次感谢。
解决方案
您可以使用array-diff或 simple 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";
推荐阅读
- java - 为什么将值设置为数组的特定下标不打印出来?
- python - Spyder 4.1.5 禁用选定的 pycodestyle 警告
- javascript - 如何以角度合并两个对象数组?
- python - AttributeError:“DlpServiceClient”对象没有属性“project_path”
- angular - 在浏览器控制台中无法获得 Angular 编译器错误
- javascript - P5 - 从矩阵加载数据
- excel - 在 .csv 文件中的选定列上设置过滤器
- r - geom_raster 如何处理重复填充?
- javascript - 按键复位功能
- html - 移动版网站上的额外空白