Php 关联数组的数组\u切片

Php 关联数组的数组\u切片,php,arrays,slice,associative-array,Php,Arrays,Slice,Associative Array,我有一个以索引作为时间戳的数组。 我尝试了array\u slice获取一个时间范围内的所有值,但它似乎不起作用 $data = array_slice(["1549440811" => 1, "1549448226" => 2, "1551108588" => 3 ], 0, 1549460338); 我应该将$data作为[“1549440811”=>1,“1549448226”=>2]获取,但它不是那样工作的 为了获得正确的数据,我必须使用 $data = array_

我有一个以索引作为时间戳的数组。 我尝试了
array\u 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
():

例如:

编辑:


最快的方法是使用
$keys=array\u keys($arr)提取关键字(假设您的数组已排序)
然后使用二进制搜索(
O(log(n))
)搜索
$range
)->然后使用该索引使用
array\u slice

我不喜欢循环,因为数据太多。@MehravishTemkar使用
array\u filter
更新帖子-更好吗?谢谢。让我在代码中实现它,然后回到you@MehravishTemkar在后端,这将是非常感谢。阵列中有数千条记录以及时间戳,避免了会减慢速度的事情@DanyalSandeelowhy you filtering array,why not filter in mysql query or which use you database???@nagennayak我对从数据库获取的数据有一个循环,时间戳1549460338是循环中的一条记录,我避免了在循环中查询数据库以获取其他数据。我在一个查询中通过时间戳索引了其他数据instead@nageennayak我正在获取的其他数据正在被循环中的其他记录重用。数组是否已按时间戳排序?@acd yes sorted
$filtered = array_filter( $arr,
    function ($key) use ($range) {return $range > $key;},
    ARRAY_FILTER_USE_KEY
);