Necesito ordenar mi matriz multidimensional por un valor en la matriz secundaria. En el ejemplo de matriz a continuación, necesito ordenar las matrices principales por valor secundario "certificado de ingresos".

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

usort($data_array, 'custom_sort');

Siento que estoy casi allí, pero lo que simplemente no entiendo es cómo hacer referencia al valor de la matriz secundaria de "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
        )

)

Gracias por cualquier ayuda.

1
Jeff Walden 29 ene. 2016 a las 02:46

3 respuestas

La mejor respuesta

No use strcmp :)

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

usort($data_array, 'custom_sort');

Custom_sort debe devolver un valor negativo, 0, positivo cuando $ a <$ b, $ a == $ b, $ a <$ b respectivamente (al igual que strcmp hace BTW).

1
Gavriel 28 ene. 2016 a las 23:59
Array ( [0] => Array ( [India] => 2 ) [1] => Array ( [Canada] => 1 ) [2] => Array ( [USA] => 3 ) )

También ordena este orden desc según el valor del país

0
VnoitKumar 22 jul. 2020 a las 14:32

Creo que debes usar ksort en su lugar

Ordena una matriz por clave, manteniendo la clave para las correlaciones de datos. Esto es útil principalmente para matrices asociativas.

0
Eric 28 ene. 2016 a las 23:50