以下のような二次元配列があります。
array( array(), array(), array(), array(), array(), array() );
1 日 8 時間のタイム スロットで0,1,2 のインデックス付き配列にアクセスする必要があります。ユーザー要求値が最初の 8 時間スロットの配列値と一致する場合、ユーザーは 3 番目のインデックス配列を取得します。それ以外の場合、同じユーザー要求の場合は 0 番目のインデックス配列を取得します再び次の 8 時間のスロットで、4 番目のインデックス付き配列を取得します。配列の値と一致しない新しいリクエストがある場合、それらはスケジュールされたインデックス付き配列を取得します。
12:00A.M から 8:00Am までは Array( 0 => array() ) を取得し、
午前 8:00 から午後 16:00 までは Array( 1 => array() ) を取得し、
16:00Pm または 23:59PM から、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 );
}
}
しかし、配列を 2 つのスロットのみ、つまり 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
正常に実行できますが、将来的には、スロットがさらにある場合、抽象定義を含む関数を使用してそれを達成するにはどうすればよいでしょうか。