【发布时间】:2014-07-16 05:42:43
【问题描述】:
我有一个具有这种结构的数组:
$months = array(
MM => array(
'start' => DD,
'end' => DD,
'type' => (string),
'amount'=> (float),
),
);
MM 是一个月(01-12,字符串),DD 是一个月中的一天(01-31,字符串)。 并非所有月份都在数组中。对于每个月,都有可变数量的子数组,每个子数组的范围都有唯一的天数。例如,一个月有三个子数组,三个范围的天,但这些范围内使用的天永远不会重叠或重复,每个 DD 值都是唯一的。唯一的例外是在某些范围内“开始”和“结束”可能重合(同一个 DD 日),但每个月永远不会有两个相同的“开始”日或两个相同的“结束”日。
我需要在每个月循环几个月和几天时使用这个数组。在本月的每一天循环时,我需要检查该特定日期是否在“开始”或“结束”中匹配。如果匹配为真,我还需要检索相邻的值。
在这样做的过程中我遇到了一个问题:我如何知道存在这种匹配的子数组的键索引?例如,我如何知道比赛是否开启
$months['09'][3]['start'] == $current_day_in_loop;
或者更确切地说:
$months['09'][6]['start'] == $current_day_in_loop;
还是另一个键?
由于我不知道每个月有多少范围,因此索引键是可变的,或者可能根本没有。如何查找匹配值是否在键[3] 或[6] 上?一旦我知道密钥,我就可以使用它来查找同一子数组中的相邻值。
【问题讨论】:
-
不知道你想在哪里使用这个结构
-
这是一种日历,我需要为每个月存储可变数量的天数 - 不考虑年份;如果有充分的理由,我可能会更改数组的结构
-
好吧,您可以使用 php 的 date() time() 函数轻松实现这一点。为什么明确需要这种特殊类型的结构?我的意思是,既然轮子已经存在,为什么还要重新发明呢?
-
我不需要时间戳,我需要从这些数据中提取数年。与现在时间无关。是否有任何 php 函数可以帮助我建立日期范围?此外,稍后我还需要在 javascript 对象中使用相同的数组数据。
-
date() 以您自己的自定义格式转换任何日期字符串或时间戳。如果你不想要几年,那很好。建立日期范围是可能的。如果您在 php 中获取值,那么很容易将其传输到 JS 变量。
标签: php multidimensional-array key-value arrays