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

时间:2013-01-20 10:14:08

标签: php arrays time multidimensional-array

我有一个二维数组如下:

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

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

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

  • 从早上8点到下午16点,他们获得了Array(1 => array()),

  • 从16:00Pm 23:59 PM得到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条件,但是将来如果有更多的插槽,那么我怎样才能使用包含抽象定义的函数来实现它。

0 个答案:

没有答案