可能很难理解..请问你是否有任何疑问。 有两个数组
$firstArray=array(array('startDate'=>'5-05-2016',endDate=>'10-05-2016')
array('startDate'=>'5-06-2016',endDate=>'10-0-2016')); //multiple records
$secondArray=array(array('date'=>'07-05-2016',array('date'=>'07-06-2016'))); //multiple recods
// this is what I tried
if($firstArray){
foreach($firstArrat $intArr){
if($secondArray){
foreach($secondArray as $sArr){
if (($intArr['startDate'] < $sArr['date']) && ($intArr['endDate'] > $sArr['date'])){
echo $sArr['date'];
}
else{
echo $sArr['date'];
}
}
}
}
如果日期介于第一个数组开始日期和结束日期之间,我需要从第二个数组中获取特定数据。第一个数组循环中的第二个数组没有帮助我。记录重复。只有一条记录应匹配。请帮忙 。卡在海洋中间。
答案 0 :(得分:2)
这样做,使用循环到secondArray,你可以检查它是否在第一个数组的开始和结束之间。 $firstArray
必须有这两个条目。
在线查看Online test。
使用
strtotime
将每次转换为时间戳。
$firstArray = array(
array('startDate' => '05-05-2016', 'endDate' => '10-05-2016'),
array('startDate' => '05-06-2016', 'endDate' => '10-07-2016'),
array('startDate' => '05-08-2016', 'endDate' => '10-11-2016')
);
$secondArray = array(array('date' => '07-05-2016'), array('date' => '12-07-2016'), array('date' => '12-11-2016'));
function find_match($index){
global $firstArray, $secondArray;
foreach($secondArray as $date){
if(strtotime($date['date']) > strtotime($firstArray[$index]['startDate']) && strtotime($date['date']) < strtotime($firstArray[$index]['endDate']))
return $date['date'];
}
return null;
}
foreach($firstArray as $key => $st_dates){
$date = find_match($key);
echo ($date != null) ? $date : "No match Found.";
echo '<br/>';
}
<强>结果:强>
07-05-2016
No match Found.
No match Found.
答案 1 :(得分:1)
function find_match($index){
$data=null;
global $firstArray, $secondArray;
foreach($secondArray as $date){
if(strtotime($date['date']) > strtotime($firstArray[$index]['startDate']) && strtotime($date['date']) < strtotime($firstArray[$index] ['endDate']))
$data=$date['date'];
}
if($data !=null){
return $data;
}else{
return null
}
}