У меня очень большой массив. Массивы внутри массивов. Ниже приведена его небольшая часть;

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

Возможно, есть функция, которая позволяет вам указывать строку и перемещать ее в начало каждого массива каждый раз, если она ее находит?

1
mikelovelyuk 23 Дек 2013 в 17:38

2 ответа

Лучший ответ

Используйте 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+) с поддержкой анонимных функций .

1
Niels Keurentjes 23 Дек 2013 в 13:42

Используйте пользовательскую функцию

  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");
0
sergio 23 Дек 2013 в 13:45