Php 对数组进行排序的有效方法?
我有一个可变长度数组,包含按startdate排序的事件,如下所示:Php 对数组进行排序的有效方法?,php,arrays,sorting,Php,Arrays,Sorting,我有一个可变长度数组,包含按startdate排序的事件,如下所示: Array ( [0] => stdClass Object ( [id] => 1978 [date] => 2012-09-29 ) [1] => stdClass Object ( [id] => 1979 [date] => 2012-10-14 ) ...etc.... 我需要创建
Array
(
[0] => stdClass Object
(
[id] => 1978
[date] => 2012-09-29
)
[1] => stdClass Object
(
[id] => 1979
[date] => 2012-10-14
)
...etc....
我需要创建一个函数,该函数取一个事件,并放入一个长度为七的新数组的中间,并将事件的邻居放在每一边。p> 因此,如果将事件5传递给函数,则输出应为:
[2][3][4][5][6][7][8]
[10][11][12][1][2][3][4]
[2][3][4][5][6][1][]
如果将第一个事件传递给函数,且原始事件量为12,则输出应为:
[2][3][4][5][6][7][8]
[10][11][12][1][2][3][4]
[2][3][4][5][6][1][]
如果原始事件量为6,且第五个事件已通过,则输出应为:
[2][3][4][5][6][7][8]
[10][11][12][1][2][3][4]
[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);
?>
您当前的解决方案是什么?使用ksort()
或usort()
有什么问题?我已经计算了原始数组将向左或向右移位的量,以及将从移位中“切断”哪些键。然后我创建一个新数组,从[3]开始填充,然后在左侧或右侧添加截断键。它完全是手工编写的,让我觉得我应该用其他方式来做……为什么$selected
是函数的参数,而TO\u SHOW
是一个常量?您选择的将是一个变量?您在中心需要的是;但是为什么TO_SHOW
也不是一个变量呢?似乎不必要的全局范围。这将是一个常量,您要显示多少项,在所有情况下都是7。不过,最好将其作为函数的参数,而不是整个应用程序的全局参数。