php сортировка серьезно многомерного массива - PullRequest
0 голосов
/ 26 апреля 2010

Я пытаюсь отсортировать многомерный объект, и, посмотрев на php.net и здесь, я понял, что мне нужно написать функцию, которую я мог бы затем вызвать через usort. У меня проблемы с синтаксисом. Я никогда раньше не писал что-то такое сложное, и пытаясь понять это, я чувствую себя как обманщик ...

Я работаю с массивом, размещенным в конце этого поста. Я хочу отфильтровать повторяющиеся значения [n]. Но, и это сложная часть для меня, я хочу сохранить значение [n], которое имеет наименьшее значение [d].

Итак, если у меня есть (и этот пример упрощен, реальный массив находится в конце этого поста):

Array ( 

[7777] => Array 
            ( [0] => Array
                ( [n] => '12345' [d] => 1 ) 
              [1] => Array
                ( [n] => '67890' [d] => 4 )
            )

[8888] => Array
            ( [2] => Array
                ( [n] => '12345' [d] => 10 )
              [3] => Array
                ( [n] => '67890' [d] => 2 )
            )
)

Я хочу отфильтровать повторяющиеся значения [n] на основе значения [d], чтобы получить следующее:

Array ( 

[7777] => Array 
            ( [0] => Array
                ( [n] => '12345' [d] => 1 ) 
            )

[8888] => Array
              [3] => Array
                ( [n] => '67890' [d] => 2 )
            )
)

Я пытался написать различные варианты примера функции cmp, размещенного на php.net, но я не смог заставить его работать, и я думаю, что это потому, что я не совсем ясно, как его пройти используя их пример ...

Я пытался:

function cmp($a, $b) 
{
    if($a['n'] == $b['n'])
    {
        if($a['d'] == $b['d'])
        {
            return 0;
        }
    }
    return ($a['n'] < $b['n']) ? -1 : 1;
}

Но это действительно не сработало ... Во всяком случае, вот реальный массив, с которым я пытаюсь работать ... Помощь очень ценится!

Array
(
    [32112] => Array
        (
            [0] => Array
                (
                    [n] => '02124'
                    [d] => '0'
                )

            [1] => Array
                (
                    [n] => '02124'
                    [d] => '0.240101905123744'
                )

            [2] => Array
                (
                    [n] => '11050'
                    [d] => '0.441758632682761'
                )

            [3] => Array
                (
                    [n] => '02186'
                    [d] => '0.317514080260304'
                )
        )
    [43434] => Array
        (
            [4] => Array
                (
                    [n] => '02124'
                    [d] => '5.89936971664429e-05'
                )

            [5] => Array
                (
                    [n] => '02124'
                    [d] => '0.145859264792549'
                )

            [6] => Array
                (
                    [n] => '11050'
                    [d] => '0.327864593457739'
                )

            [7] => Array
                (
                    [n] => '11050'
                    [d] => '0.312135345168295'
                )
          )
)

1 Ответ

1 голос
/ 26 апреля 2010

Вы не столько сортируете, сколько фильтруете. Вам нужно будет через массивы хранить значения н / д и сравнивать, а затем сбрасывать, когда это применимо.

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