Сортировка массива массивов по длине дочернего массива? - PullRequest
2 голосов
/ 22 января 2009

Как лучше всего в PHP сортировать массив массивов по длине массива?

, например

$parent[0] = array(0, 0, 0);
$parent[2] = array("foo", "bar", "b", "a", "z");
$parent[1] = array(4, 2);

$sorted = sort_by_length($parent)

$sorted[0] = array(4, 2);
$sorted[1] = array(0, 0, 0);
$sorted[2] = array("foo", "bar", "b", "a", "z");

Ответы [ 4 ]

3 голосов
/ 22 января 2009

Это будет работать:

function sort_by_length($arrays) {
    $lengths = array_map('count', $arrays);
    asort($lengths);
    $return = array();
    foreach(array_keys($lengths) as $k)
        $return[$k] = $arrays[$k];
    return $return;
}

Обратите внимание, что эта функция сохранит цифровые клавиши. Если вы хотите сбросить ключи, поместите их в вызов array_values ​​() .

2 голосов
/ 22 января 2009

Я голосую за Питера, но вот другой способ, я думаю:

function cmp($a1, $a2) {
    if (count($a1) == count($a2)) {
        return 0;
    }
    return (count($a1) < count($a2)) ? -1 : 1;
}

usort($array, "cmp");
0 голосов
/ 22 января 2009

Попробуйте функцию usort:

function sortByLength( $arr1, $arr2 )
{
    $c1 = count($arr1);
    $c2 = count($arr2);

    return $c1 < $c2 ? -1 : $c1 == $c2 ? 0 : 1;
}

usort($initial_array,'sortByLength');

отредактировано для соответствия параметрам по ссылке; это тот же ответ, что и @david, в любом случае

0 голосов
/ 22 января 2009

А как насчет использования длины в качестве ключа массива, а затем выполнения ксорта? например:

function sort_by_length($parent) { 
  foreach($parent as $child) {
   $sorted[count($child)] = $child;
  }
  return ksort($sorted);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...