无法通过循环从PHP二维多维数组中获取特定记录

时间:2016-05-15 07:28:11

标签: php arrays

可能很难理解..请问你是否有任何疑问。 有两个数组

$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'];
            }
           }
          }
        }

如果日期介于第一个数组开始日期和结束日期之间,我需要从第二个数组中获取特定数据。第一个数组循环中的第二个数组没有帮助我。记录重复。只有一条记录应匹配。请帮忙 。卡在海洋中间。

2 个答案:

答案 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
}
}