1, "1549-6ren">
gpt4 book ai didi

php - 关联数组的 array_slice

转载 作者:搜寻专家 更新时间:2023-10-31 21:19:47 24 4
gpt4 key购买 nike

我有一个以索引作为时间戳的数组。我试过 array_slice获取某个时间范围内的所有值,但它似乎不起作用。

$data = array_slice(["1549440811" => 1, "1549448226" => 2, "1551108588" => 3 ], 0, 1549460338);

我应该得到 $data作为["1549440811" => 1, "1549448226" => 2]但它不是那样工作的。

为了获得正确的数据我必须使用

$data = array_slice(["1549440811" => 1, "1549448226" => 2, "1551108588" => 3 ], 0, 2);

但问题是记录可以有随机时间戳,但没有。的记录。所以我无法计算出在这种情况下为 2 的偏移量。

我知道下面的代码稍作改动可能适用于小范围但不适用于我的时间戳 $myrange会有很多数据。

$myrange = range(0,1549460338);
$output = array_intersect(["1549440811" => 1, "1549448226" => 2, "1551108588" => 3 ] , $myrange );

我避免遍历数组,因为数组有很多数据。我还有很多时间戳要检查。这段代码是一个更大代码的简化逻辑,其中包含来自数据库的记录并用时间戳进行索引。

有没有其他方法可以获得所需的数据?

最佳答案

简单的 for 循环应该做的:

$arr = ["1549440811" => 1, "1549448226" => 2, "1551108588" => 3 ];
$range = "1549460338";
foreach($arr as $k => $v) {
if ($range > $k)
break;
$newArr[$k] = $v;
}

您还可以使用 array_filter ( doc ):

$filtered = array_filter( $arr,
function ($key) use ($range) {return $range > $key;},
ARRAY_FILTER_USE_KEY
);

示例:3v4l

编辑:

最快的方法(考虑你的数组是排序的)是用 $keys = array_keys($arr); 提取键,然后使用二进制搜索 (O(log(n))) 搜索 $range -> 然后使用带有该索引的 array_slice

关于php - 关联数组的 array_slice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55490429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com