Сортировать набор многомерных массивов по элементам массива - PullRequest
4 голосов
/ 26 мая 2010

Допустим, я начал здесь:

$arr[0] = array('a' => 'a', 'int' => 10);
$arr[1] = array('a' => 'foo', 'int' => 5);
$arr[2] = array('a' => 'bar', 'int' => 12);

И я хочу попасть сюда:

$arr[0] = array('a' => 'foo', 'int' => 5);
$arr[1] = array('a' => 'a', 'int' => 10);
$arr[2] = array('a' => 'bar', 'int' => 12);

Как мне отсортировать элементы в массиве по элементам этих элементов?

Многомерные массивы всегда чувствуют себя немного больше, чем может выдержать мой мозг (-_-) (пока я не разберусь с ними, и они не покажутся супер легкими)

Ответы [ 2 ]

5 голосов
/ 26 мая 2010

Хотите заказать их по значению клавиши "int"?

Используйте uasort с функцией обратного вызова:

function compare_by_int_key($a, $b) {
    if ($a['int'] == $b['int']) {
        return 0;
    }
    return ($a['int'] < $b['int']) ? -1 : 1;
}
uasort($arr, "compare_by_int_key");
0 голосов
/ 26 мая 2010

Прежде всего, не забудьте изменить переменную индекса, которую вы используете для ссылки на массив, потому что сейчас у вас есть только два элемента в базовом массиве, потому что вы присваиваете значение $ arr [1] дважды.

Вот код:

// for the number of elements in the base array
for ( $eye = 0; $eye < sizeOf($arr); $eye += 1) {
    // grab each element in the array
    for ( $jay = 0; $jay < sizeOf($arr); $jay += 1) {
        // if the second element of the base array's current element
        // is greater than the next one
        if ( $arr[$jay][1] > $arr[$jay + 1][1] ) {
            // then swap those values
            $temp = $arr[$jay]
            $arr[$jay] = $arr[$jay+1]
            $arr[$jay+1] = $temp
        }
    }
}

Имейте в виду, я не тестировал этот код, поэтому вам, возможно, придется выполнить небольшое количество отладки. Это должно сортировать так, как вы хотите, есть более быстрые способы выполнить этот поиск, но это упрощенный список, и я попытался дать вам некоторые пояснения в коде комментария.

Надеюсь, это поможет, Gale

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...