如何在多维数组中按指定时间戳范围查询并返回对应键名
Hey,针对你的需求,我整理了一套清晰的解决方案,帮你快速筛选出符合时间范围的数组键名👇
解决方案
整体思路很明确:遍历数组中的每个元素,拆分出时间戳字段,判断它是否落在目标区间内,最后收集符合条件的元素键名。下面是完整的代码实现,包含从原始数据处理到结果输出的全流程:
完整代码示例
// 原始字符串形式的数组(如果你的$data已经是PHP数组,这部分可以跳过) $dataStr = "Array ( [0] => 1520155838|1234|2000|Name1|COMPLETE|2|18|1 [1] => 1520156051|1234|2000|Name2|COMPLETE|20|3|1 [2] => 1520165693|1234|2000|Name3|COMPLETE|3|15|1 [3] => 1520166218|1234|2000|Name4|COMPLETE|26|71|1 [4] => 1522128854|1234|2000|Name5|COMPLETE|77|121|1 [5] => 1522129106|1234|2000|Name6|COMPLETE|221|244|1 )"; // 把字符串转成实际的PHP数组 preg_match_all('/\[(\d+)\] => ([^\s]+)/', $dataStr, $matches); $data = array_combine($matches[1], $matches[2]); // 定义目标时间范围 $startTs = 1520155840; $endTs = 1520165699; // 存储符合条件的键名 $validKeys = []; // 遍历处理每个元素 foreach ($data as $key => $item) { // 拆分元素(如果你已经完成explode操作,直接用拆分后的子数组即可,比如$parts = $item;) $parts = explode('|', $item); // 提取时间戳并转成整数 $currentTs = (int)$parts[0]; // 判断是否在目标范围内 if ($currentTs >= $startTs && $currentTs <= $endTs) { $validKeys[] = $key; } } // 输出结果 print_r($validKeys);
代码细节解释
- 原始数据转换:如果你的
$data已经是PHP数组,直接跳过正则匹配的步骤就行;如果是字符串形式的数组,用正则提取键和值,转成可操作的数组。 - 时间范围定义:把需求中的起始和结束时间戳存成变量,方便后续调整。
- 遍历与筛选:循环数组的每个元素,拆分后提取第一个字段(也就是时间戳),转成整数后和目标范围对比,符合条件的键名存入结果数组。
运行结果
执行这段代码后,会输出符合条件的键名数组:
Array ( [0] => 1 [1] => 2 )
对应的就是原始数组中键为1和2的元素,它们的时间戳1520156051、1520165693正好落在1520155840到1520165699的范围内。
内容的提问来源于stack exchange,提问作者Hossam
相关产品推荐
相关产品推荐

