2016-01-28 24 views
1

我需要通过子数组中的值对我的多维数组进行排序。在下面的数组示例中,我需要通过子值“revenue_certificate”对父数组进行排序。PHP,由子数组排序多维数组

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

usort($data_array, 'custom_sort'); 

我觉得我快到了,但是我根本不明白的是如何引用“revenue_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

你的代码看起来不错,有什么问题?你有错误吗? – Gavriel

+0

没有错误。当运行原来的代码时,数组按“revenue_certificate”进行排序,但它并不将“revenue_certificate”的值视为数字,而是将其视为字符串。例如,这可能是结果顺序:0,10,11000,125,1350,20 –

回答

1

不要使用STRCMP :)

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

usort($data_array, 'custom_sort'); 

custom_sort应该返回一个负,0,正值当$一个< $ B $ A == $ B,分别为一个< $ B(只作为strcmp做BTW)。

+1

工作很好!后续,但这实际上是如何工作的?它看起来只是从另一个数组中减去一个数组值。 –

0

我相信你需要使用ksort代替

排序对数组按照键,保持关键数据的相关性。这主要用于关联数组。

+0

'ksort'看起来像是对*键*进行排序,而不是OP的问题,他需要根据数值对数组排序他的数组。一个特定的键。我是否误解了手边的问题和/或您的解决方案? –

+0

查看DavidG的注释,看起来这是OP所需要的。虽然 – Eric