1

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

array( array(), array(), array(), array(), array(), array() );

我必须在一天 8 小时的时间段中访问0,1,2 个索引数组,如果用户请求值与第一个 8 小时时间段中的数组值匹配,那么他将获得第 3 个索引数组,否则为第 0 个索引数组,如果相同的用户请求在接下来的第 8 小时时隙再次,然后他将获得第 4 个索引数组。如果有新请求与数组中的值不匹配,那么他们会得到预定的索引数组,即

  • 从上午 12:00 到上午 8:00,他们得到 Array( 0 => array() ),

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

  • 从下午 16:00 到 23:59,他们得到 Array(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 );
        }
    }

但是,如果必须在两个槽中抛出数组,即在 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 );
        }
    }
}

这只是一次尝试,但它有点不起作用,因为如果用户请求值与最后一个数组元素值匹配,那么我必须抛出第一个数组。我可以使用if/else条件成功地做到这一点,但将来如果有更多插槽,那么我如何使用包含抽象定义的函数来实现它。

4

0 回答 0