You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多维数组中按指定时间戳范围查询并返回对应键名

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);

代码细节解释

  1. 原始数据转换:如果你的$data已经是PHP数组,直接跳过正则匹配的步骤就行;如果是字符串形式的数组,用正则提取键和值,转成可操作的数组。
  2. 时间范围定义:把需求中的起始和结束时间戳存成变量,方便后续调整。
  3. 遍历与筛选:循环数组的每个元素,拆分后提取第一个字段(也就是时间戳),转成整数后和目标范围对比,符合条件的键名存入结果数组。

运行结果

执行这段代码后,会输出符合条件的键名数组:

Array
(
    [0] => 1
    [1] => 2
)

对应的就是原始数组中键为1和2的元素,它们的时间戳1520156051、1520165693正好落在1520155840到1520165699的范围内。

内容的提问来源于stack exchange,提问作者Hossam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:01:03