首页 > 解决方案 > 如果变量存在于数组中,则php中的数组条件

问题描述

我正在创建一个函数来返回一个日期,其中我有一个包含对象的数据数组,我想在单独的数组中插入与状态为 1 和 2 的数据数组相同的日期。

这是我的数组对象数据:

Array ( [0] => stdClass Object ( [time] => 2019-09-09 09:00:00 [status] => 1 )
        [1] => stdClass Object ( [time] => 2019-09-09 17:00:00 [status] => 2 ) 
        [2] => stdClass Object ( [time] => 2019-09-10 09:00:00 [status] => 1 )
        [3] => stdClass Object ( [time] => 2019-09-10 17:00:00 [status] => 2 )
        [4] => stdClass Object ( [time] => 2019-09-11 09:00:00 [status] => 1 )
        [5] => stdClass Object ( [time] => 2019-09-11 17:00:00 [status] => 2 )
        [6] => stdClass Object ( [time] => 2019-09-12 09:00:00 [status] => 1 )
        [7] => stdClass Object ( [time] => 2019-09-13 09:00:00 [status] => 1 )
)

我想返回类似这样的数组:

Array [0] 2019-09-09
      [1] 2019-09-10
      [2] 2019-09-11

我从数据库中得到这个结果。

标签: phpmysqlsqlarraysobject

解决方案


如果您始终希望状态为1or 2,则可以运行查询,在其中选择DISTINCT值,在DATE()列上使用。然后检查日期是否同时具有状态 1 和 2。

请注意,如果您可能拥有很多状态,则此解决方案无法很好地扩展 - 那么您应该考虑另一种方法。

SELECT DISTINCT DATE(t.time) AS time
FROM myTable t
JOIN myTable t2 
  ON DATE(t.time) = DATE (t2.time)
WHERE t.status = 1
  AND t2.status = 2
ORDER BY t.time

桌子

CREATE TABLE myTable (
  time DATETIME,
  status SMALLINT
);

INSERT INTO myTable VALUES
('2019-09-09 09:00:00', 1),
('2019-09-09 17:00:00', 2),
('2019-09-10 09:00:00', 1),
('2019-09-10 17:00:00', 2),
('2019-09-11 09:00:00', 1),
('2019-09-11 17:00:00', 2),
('2019-09-12 09:00:00', 1),
('2019-09-13 09:00:00', 1);

产生结果

2019-09-09
2019-09-10
2019-09-11

推荐阅读