Сортировка трехмерного массива - PullRequest
2 голосов
/ 11 апреля 2011

У меня есть такой массив

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [szam] => 8
                    [index] => 0
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [szam] => 1
                    [index] => 0
                )

            [1] => Array
                (
                    [szam] => 7
                    [index] => 1
                )

        )

Я думал, что мой последний cmp будет работать нормально

function maxSzerintCsokkeno($item1,$item2)
{
    if ($item1['szam'] == $item2['szam']) return 0;
    return ($item1['szam'] < $item2['szam']) ? 1 : -1;
}

с foreach

foreach ($tomb as $kulcs => $adat)  usort($adat,"maxSzerintCsokkeno");

, ноон ничего не делает, советуете?

Ответы [ 3 ]

3 голосов
/ 11 апреля 2011
foreach ($tomb as $kulcs => $adat)  usort($adat,"maxSzerintCsokkeno");

Это только сортирует массив подмассива $ adat. И это существует только временно, пока foreach не зациклится на следующем. Ленивый вариант здесь будет использовать ссылку:

foreach ($tomb as & $adat)  usort($adat,"maxSzerintCsokkeno");

Обратите внимание на &. Таким образом, изменение в $ adat будет применено непосредственно в родительском массиве.

2 голосов
/ 11 апреля 2011

Вы сортируете временную переменную, то есть изменения не применяются.Следующее должно работать для вас:

for($i = 0, $length = count($tomb); $i < $length; $i++)
{
    usort($tomb[$i], "maxSzerintCsokkeno");
}
0 голосов
/ 11 апреля 2011

При итерации цикла foreach ключевые переменные и значения ($kulcs и $adat в вашем коде) являются копиями фактических значений в массиве. Как сказал Тим Купер, вы на самом деле сортируете копию исходного значения.

Вы также можете передать значение по ссылке в цикле foreach. Это означает, что вы будете изменять исходное значение:

foreach ($tomb as $kulcs => &$adat)  usort($adat,"maxSzerintCsokkeno");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...