Php 如何在不同的时隙中提取数组

Php 如何在不同的时隙中提取数组,php,arrays,time,multidimensional-array,Php,Arrays,Time,Multidimensional Array,我有一个二维数组,如下所示: array( array(), array(), array(), array(), array(), array() ); 我必须在一天中8小时的时间段内访问0,1,2索引数组,如果用户请求值与前8小时的数组值匹配,则他将获得第3个索引数组,否则将获得第0个索引数组,如果同一用户在下一个8小时再次请求,则他将获得第4个索引数组。若有新的请求和数组中的值不匹配,那个么它们将得到预定的索引数组,即 从12:00A.M到8:00Am,他们得到数组(0=>Array(

我有一个二维数组,如下所示:

array( array(), array(), array(), array(), array(), array() );
我必须在一天中8小时的时间段内访问0,1,2索引数组,如果用户请求值与前8小时的数组值匹配,则他将获得第3个索引数组,否则将获得第0个索引数组,如果同一用户在下一个8小时再次请求,则他将获得第4个索引数组。若有新的请求和数组中的值不匹配,那个么它们将得到预定的索引数组,即

  • 从12:00A.M到8:00Am,他们得到数组(0=>Array())

  • 从上午8:00到下午16:00,他们得到数组(1=>Array())

  • 从16:00Pm到23:59PM,他们得到数组(2=>Array()

我使用if-else条件实现了此功能,但使用了硬线计时条件:

$params = array(); //main array

$pn = $_REQUEST['pn'];
$ad = new time_slot();

$time = date("H");
if ( $pn == $ad->ad_filter( $params, 0 ) ) { //ad_filter extract value from array and match request user value
        if ( $time < 8 ) {
            echo $ad->ad_data( $params, 1 ); //ad_data throw an array from multi-dimensional array 
        } else {
            echo $ad->ad_data( $params, 3 );
        }
    } elseif ( $pn == $ad->ad_filter( $params, 1 ) ) {
        if ( $time > 8 && $time < 16 ) {
            echo $ad->ad_data( $params, 2 ); //after 8 hour
        } else {
            echo $ad->ad_data( $params, 4 );
        }
    } elseif ( $pn == $ad->ad_filter( $params, 2 ) ) {
        if ( $time > 16 && $time < 24 ) {
            echo $ad->ad_data( $params, 0 ); //after 16 hour
        } else {
            echo $ad->ad_data( $params, 5 );
        }
    } elseif ( !in_array($pn, $ad->ad_filter( $params ))) { //if request is new
        if ( $time < 8 ) {
            echo $ad->ad_data( $params, 0 );
        } elseif ( $time > 8 && $time < 16 ) {
            echo $ad->ad_data( $params, 1 );
        } elseif ( $time > 16 && $time < 24 ) {
            echo $ad->ad_data( $params, 2 );
        } else {
            echo $ad->ad_data( $params, 3 );
        }
    }
$params=array()//主阵列
$pn=$_请求['pn'];
$ad=新的时隙();
$time=日期(“H”);
if($pn==$ad->ad_filter($params,0)){//ad_filter从数组中提取值并匹配请求用户值
如果($time<8){
echo$ad->ad_data($params,1);//ad_data从多维数组中抛出一个数组
}否则{
echo$ad->ad_数据($params,3);
}
}elseif($pn==$ad->ad_过滤器($params,1)){
如果($time>8&&$time<16){
echo$ad->ad_数据($params,2);//8小时后
}否则{
echo$ad->ad_数据($params,4);
}
}elseif($pn==$ad->ad_过滤器($params,2)){
如果($time>16&$time<24){
echo$ad->ad_数据($params,0);//16小时后
}否则{
echo$ad->ad_数据($params,5);
}
}elseif(!in_数组($pn,$ad->ad_过滤器($params)){//如果请求是新的
如果($time<8){
echo$ad->ad_数据($params,0);
}其他($time>8&$time<16){
echo$ad->ad_数据($params,1);
}其他($time>16&$time<24){
echo$ad->ad_数据($params,2);
}否则{
echo$ad->ad_数据($params,3);
}
}
但若我只能在两个时隙(即12小时时隙或4小时时隙)中使用数组,那个么我必须再次编写条件代码,这对我来说是可悲的。因此,我为这个场景创建了一个函数包装器:

使用sizeof对数组进行计数,并在所有迭代中循环它,如下所示:

function array_scheduling( $params = array() ) {

    for ($i=0; $i<sizeof($params)/2; $i++) {
      if ($pn == $ad->ad_filter($params, $i)) {
        if ($time < (24/(sizeof($params)/2))*($i+1)) {
            echo $ad->ad_data( $params, $i++ );
        } else {
            echo $ad->ad_data( $params, $i+=3 );
        }
        } elseif (!in_array($pn, $params)) {
        echo $ad->ad_data( $params, $i );
        }
    }
}
函数数组\u调度($params=array()){
对于($i=0;$iad_过滤器($params,$i)){
如果($time<(24/(sizeof($params)/2))*($i+1)){
echo$ad->ad_数据($params,$i++);
}否则{
echo$ad->ad_数据($params,$i+=3);
}
}elseif(!in_数组($pn,$params)){
echo$ad->ad_数据($params,$i);
}
}
}
这只是一个尝试,但有点不起作用,因为若用户请求值与最后一个数组元素值匹配,那个么我必须抛出第一个数组。我可以使用
if/else
条件成功地做到这一点,但在将来,如果有更多插槽,那么我如何使用包含抽象定义的函数来实现它