php基于值排序数组

时间:2013-12-23 13:38:17

标签: php arrays string

我有一个非常大的阵列。数组中的数组。以下是其中的一小部分;

[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  
    )

)

我不能做一个简单的asort因为我从来不知道“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);

是否有一个函数可能允许你指定一个字符串,并在每次找到它时将其移动到每个数组的顶部?

2 个答案:

答案 0 :(得分:1)

使用uasort指定自定义比较器回调:

uasort($array, function($a, $b) {
  if($a == 'key_points.html') return -1; // Smaller than all
  if($b == 'key_points.html') return 1;  // Larger than all
  return ($a < $b) ? -1 : 1;             // Default sorting
});

语法假定最新的PHP(5.3+)并支持anonymous functions

答案 1 :(得分:0)

使用自定义功能

  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");
相关问题