PHP, сортировка многомерного массива по дочернему массиву

1

Мне нужно отсортировать мой многомерный массив по значению в дочернем массиве. В приведенном ниже примере массива мне нужно отсортировать родительские массивы с помощью дочернего значения "income_certificate".

function custom_sort($a, $b) {
    return strcmp($a['revenue_certificate'], $b['revenue_certificate']);
}

usort($data_array, 'custom_sort');

Я чувствую, что я почти там, но где я просто не понимаю, как ссылаться на значение дочернего массива "income_certificate".

Array
(
    [0] => Array
        (
            [company_id] => 130
            [company_name] => Eureka / Brookings
            [revenue_certificate] => 3
            [revenue_cash] => 33
            [average_sale] => 0
            [total_orders] => 0
            [certificates_per_order] => -1
            [revenue_per_certificate] => -1
            [visible_items] => 25
            [retail_value] => -1
            [average_discount] => -1
            [new_advertisers] => 1
            [emails_harvested] => 1
            [new_customers] => 1
        )

    [1] => Array
        (
            [company_id] => 82
            [company_name] => Big Deals Across America
            [revenue_certificate] => 1
            [revenue_cash] => 0
            [average_sale] => 0
            [total_orders] => 0
            [certificates_per_order] => -1
            [revenue_per_certificate] => -1
            [visible_items] => 1
            [retail_value] => -1
            [average_discount] => -1
            [new_advertisers] => 0
            [emails_harvested] => 0
            [new_customers] => 0
        )

    [2] => Array
        (
            [company_id] => 134
            [company_name] => Fergus Falls, MN
            [revenue_certificate] => 2
            [revenue_cash] => 20
            [average_sale] => 0
            [total_orders] => 0
            [certificates_per_order] => -1
            [revenue_per_certificate] => -1
            [visible_items] => 128
            [retail_value] => -1
            [average_discount] => -1
            [new_advertisers] => 129
            [emails_harvested] => 2
            [new_customers] => 1
        )

)

Спасибо за любую помощь.

  • 2
    ваш код выглядит нормально, в чем проблема? Вы получаете ошибку?
  • 0
    Нет ошибки. При запуске кода, как он был первоначально размещен, массив сортируется по параметру «yield_certificate», но он не рассматривает значение «доход_сертификации» как число, а как строку. Например, это может быть результирующий порядок: 0, 10, 11000, 125, 1350, 20
Теги:
multidimensional-array
sorting

2 ответа

1
Лучший ответ

Не использовать strcmp :)

function custom_sort($a, $b) {
    return $a['revenue_certificate'] - $b['revenue_certificate'];
}

usort($data_array, 'custom_sort');

custom_sort должен возвращать отрицательное, 0, положительное значение, когда $ a <$ b, $ a == $ b, $ a <$ b соответственно (так же, как strcmp делает BTW).

  • 1
    Работал отлично! Продолжение, хотя, как это на самом деле работает? Похоже, он просто вычитает одно значение массива из другого.
0

Я считаю, что вам нужно использовать ksort вместо

Сортирует массив по ключу, поддерживая ключ к корреляции данных. Это полезно в основном для ассоциативных массивов.

  • 0
    ksort выглядит так, как будто он сортирует ключи вместо проблемы OP, когда ему нужно отсортировать свой массив на основе значений определенного ключа. Я неправильно понимаю проблему и / или ваше решение?
  • 0
    Посмотрите записку DavidG, кажется, это то, что нужно OP. Хотя я могу ошибаться

Ещё вопросы

Сообщество Overcoder
Наверх
Меню