【问题标题】:Displaying result from array according to other array根据其他数组显示数组的结果
【发布时间】:2019-02-25 11:02:27
【问题描述】:

我的数据库中有 3 个来自表单的数组

数组结果表单数据库

  • 员工姓名 דרור שליט,לנה שליט
  • 开始日期2019-02-01,2019-02-14
  • 结束日期2019-02-13,2019-02-27

我想检查当前日期是否在两个数组的范围内,如果匹配,则显示人员数组中的工作人员姓名 例如,如果我只取每个数组的第一个值,结果将是

  • 员工姓名 לנה שליט
  • 开始日期 2019-02-01
  • 结束日期 2019-02-13

这是我尝试过的,但这并没有给我正确的结果:

$neword = "SELECT `order_id` , `item`,`staff_name`, `staff_start_d`,`staff_end_d`,`item_sn`,`status`, DATE_FORMAT(`stamp` , '%d-%m-%Y'  ) as `stamp` FROM rent ";
$userord = mysqli_query($link, $neword);
foreach ($userord as $myitem);

  <?php foreach ($userord as $myitem) : ?>
<?php
      $s_dates = array($myitem['staff_start_d']);
      $e_dates = array($myitem['staff_end_d']);
      $names = array($myitem['staff_name']);
      $start = date("Y-m-d");


      foreach($s_dates  AS $date_s) {
          $timestamp = strtotime($date_s);
          if($timestamp == $start ) {
              echo "1";
          }else{
              echo "no1";
          }
      }

      foreach($e_dates  AS $date_e) {
          $timestamp = strtotime($date_e);
          if($timestamp == $start ) {
              echo "2";
          }else{
              echo 'no2';
          }
      }
      ?>

【问题讨论】:

  • 如果你想检查一个日期是否在给定的范围中,那你为什么要比较相等呢?这会让你只匹配恰好是间隔的确切开始或结束日期的日期,但如果它在两者之间的任何地方,则不会。并且要检查日期是否在任何这些间隔中,您需要根据间隔的开始 结束日期检查它 - 现在,您首先检查所有开始日期,并且然后针对之后的所有结束日期 - 也没有多大意义。
  • 你真的应该从一个更好的数据结构开始。这应该是 一个 数组(然后您可以循环),其中包含间隔(开始 结束日期)作为其元素。
  • 所以您建议将所有数据放在同一列中?比如员工姓名、开始日期、结束日期?
  • 我在这里说的是你的数组,而不是你的数据库结构。 (不一定需要 1:1 匹配。)
  • 你能给我一个更好的数据结构的例子吗?

标签: php arrays


【解决方案1】:

您需要将日期转换为时间戳,然后您可以检查如下代码:

$s_dates = explode(",", $myitem['staff_start_d']);
$e_dates = explode(",",$myitem['staff_end_d']);
$names = explode(",", $myitem['staff_name']);
$start = date("Y-m-d");


foreach($s_dates as $key => $date_s) {
    if (strtotime($start) >= strtotime($date_s) && strtotime($start) <= strtotime($e_dates[$key])) {
        // show your employee details here as
        echo $date_s.'<br/>';
        echo $e_dates[$key].'<br/>';
        echo $names[$key].'<br/>';
    }
}

另外,我假设您正在制作无用的值数组。希望对你有帮助。

【讨论】:

  • 感谢您的评论,只是为了测试我是否将 strtotime($myitem['staff_start_d']) 更改为当前日期,我得到了一个结果,而是完整的数组,而不仅仅是马赫的结果数组中的日期.. 有什么建议吗?
  • “您需要将日期转换为时间戳” - 不,您不需要;输入值已经是 sortable 格式,因此可以通过字符串比较进行必要的检查。
  • 你能给我一个基于 Rohit Mittal 答案的代码示例吗?
  • @drorshalit 我不明白你的评论。你能把你的 $userord vardump 展示给我看吗?
  • array(8) { ["order_id"]=> string(1) "1" ["item"]=> string(25) "חמישה בלונים 5" ["staff_name"]=> string(33) "דרור שליט,לנה שליט" ["staff_start_d"]=> string(21) "2019-02-01,2019-02-14" ["staff_end_d"]=> string(21) "2019-02 -13,2019-02-27" ["item_sn"]=> string(11) "balonim001" ["status"]=> string(1) "1" ["stamp"]=> string(10) "25 -02-2019" }
猜你喜欢
  • 2015-10-19
  • 1970-01-01
  • 2023-04-08
  • 2021-12-13
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多