在二维数组中搜索时间戳范围

时间:2018-03-29 17:02:10

标签: php

我有一个多维数组:

$data= "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 
)";

我需要搜索并返回时间戳范围内的密钥" 1520155840"和" 1520165699"例如。

我把它爆炸了:

$Data_Array=[];
for ($x = 0; $x < sizeof($data); $x++) {    
    array_push($Data_Array, explode("|",$data[$x]));
}

任何想法?

1 个答案:

答案 0 :(得分:1)

假设给定的是数组而不是字符串。

您可以使用array_filter在给定范围之间过滤数组。这将保留原始数组的键

$data= array( 
    "1520155838|1234|2000|Name1|COMPLETE|2|18|1",
    "1520156051|1234|2000|Name2|COMPLETE|20|3|1",
    "1520165693|1234|2000|Name3|COMPLETE|3|15|1",
    "1520166218|1234|2000|Name4|COMPLETE|26|71|1",
    "1522128854|1234|2000|Name5|COMPLETE|77|121|1",
    "1522129106|1234|2000|Name6|COMPLETE|221|244|1",
);

$fr = "1520155840";
$to = "1520165699";


$result = array_filter($data, function($v) use($fr, $to){
    $v = explode("|",$v);
    return $fr <= $v[0] && $to >= $v[0];
});

echo "<pre>";
print_r( $result );
echo "</pre>";

这将导致:

Array
(
    [1] => 1520156051|1234|2000|Name2|COMPLETE|20|3|1
    [2] => 1520165693|1234|2000|Name3|COMPLETE|3|15|1
)

Doc:Firebase Transactions