2

私はvariabelの長さの配列を持っており、startdateでソートされたイベントを含み、次のようになっています。

Array
(
[0] => stdClass Object
    (
        [id] => 1978
        [date] => 2012-09-29
    )

[1] => stdClass Object
    (
        [id] => 1979
        [date] => 2012-10-14
    )

...etc....

イベントの1つを受け取り、正確に7の長さの新しい配列の中央に配置し、イベントのネイバーを両側に配置する関数を作成する必要があります。

したがって、イベント5が関数に渡された場合、出力は次のようになります。

[2][3][4][5][6][7][8]

最初のイベントが関数に渡され、元のイベント数が12の場合、出力は次のようになります。

[10][11][12][1][2][3][4]

イベントの元の量が6で、5番目のイベントが渡された場合、出力は次のようになります。

[2][3][4][5][6][1][]

したがって、イベントのリストは常に新しい配列で「ラップアラウンド」し、可能な限りいっぱいにする必要があります。

私は解決策を一緒にハックしました、それはかなりのステップを含みます。私はそれが本当に好きではありません、そしてそれは私に不思議に思いました:

これはどのようにして最も効率的でエレガントな方法で行われますか?

4

1 に答える 1

1
You need to change the values in this codes
  define('TO_SHOW',7); // number of items to show in your case it is 7
  $selected      = 1; //// which one you need need at center.

とあなたの配列;

これを実行して試してください:

<?php 

define('TO_SHOW',7); // number of items to show in your case it is 7

function change_order($arry, $sel){
   $arr_cnt      = count($arry);   
   $shift_count  = $arr_cnt - (ceil(TO_SHOW/2)-$sel);
   for($i=0; $i<$shift_count; $i++){
      array_push($arry, array_shift($arry));
   }
   return array_slice($arry, 0, TO_SHOW);
} 

$arr            = array(array(
                    "id" => 1,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 2,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 3,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 4,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 5,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 6,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 7,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 8,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 9,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 10,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 11,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 12,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 13,
                    "date" => 2012-09-29
                    ),
                    array(
                    "id" => 14,
                    "date" => 2012-09-29
                    )
                );

$selected      = 1; //// centre one             
$test   = change_order($arr, $selected);

echo "<pre>";
print_r($test);
?>
于 2013-01-25T10:57:24.507 に答える