对数组进行排序的有效方法


Efficient way to sort an array?

我有一个变量长度数组,包含按开始日期排序的事件,如下所示:

Array
(
[0] => stdClass Object
    (
        [id] => 1978
        [date] => 2012-09-29
    )
[1] => stdClass Object
    (
        [id] => 1979
        [date] => 2012-10-14
    )
...etc....

我需要创建一个函数,该函数接受其中一个事件,并将长度恰好为 7 的新数组放在中间,并将事件的邻居放在两侧。

因此,如果事件 5 传递给函数,则输出应为:

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

如果将第一个事件传递给函数,并且原始事件量为 12,则输出应为:

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

如果事件的原始数量为 6,并且传递了第五个事件,则输出应为:

[2][3][4][5][6][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);
?>