我有一个非常大的数组。数组中的数组。以下是其中的一小部分;
[lta/] => Array(
[2012-12-31/] => Array(
[0] => 31_december_2012.pdf
[1] => 31_december_2012.xls
[2] => key_points.html
)
...
)
我需要做的是让“key_points.html”值始终从其数组的顶部开始。示例;
[2012-12-31/] => Array
(
[2] => key_points.html
[0] => 31_december_2012.pdf
[1] => 31_december_2012.xls
)
...
)
我无法进行简单的排序,因为我永远不知道“key_points.html”何时会出现在数组中。
我尝试重命名值“key_points.html”,以便对其进行排序,然后取消重命名;
foreach ($the_array as $array_object => $array_item) {
if ($array_item == "key_points.html") {
$array_item = "0001_key_points.html";
}
}
但这似乎没有任何效果!它甚至没有重命名我的值。我也用字符串替换尝试了同样的事情;
$the_array = str_replace("key_points.html", "0001_key_points.html", $the_array);
是否有一个函数可以允许您指定一个字符串,并在每次找到它时将其移动到每个数组的顶部?
使用自定义功能
function customSort (&$array, $key) {
$sorter=array();
$ret=array();
reset($array);
foreach ($array as $ii => $val) {
$sorter[$ii]=$va[$key];
}
asort($sorter);
foreach ($sorter as $ii => $val) {
$ret[$ii]=$array[$ii];
}
$array=$ret;
}
customSort($your_array,"2");
迭代调用
uasort()
可能是一种普遍考虑的解决方案,但这不会针对性能进行优化(这可能是“大数组”的一个问题)。 它会起作用,但我可能不会使用它,因为它在每一行上运行相对昂贵的排序算法。
代码:(演示)
array_walk(
$array['lta'],
fn(&$v) => uasort(
$v,
fn($a, $b) => ($b === 'key_points.html')
<=>
($a === 'key_points.html')
)
);
var_export($array);
相反,搜索粘性元素的键,然后将该行附加到粘性元素的新声明中,“工作”会更少。 联合运算符 (
+
) 不允许原始粘性值存在于行的后面。
代码:(演示)
foreach ($array['lta'] as &$row) {
if (($k = array_search('key_points.html', $row)) !== false) {
$row = [$k => 'key_points.html'] + $row;
}
}
var_export($array);