排序关联数组PHP

时间:2010-03-18 10:44:36

标签: php arrays associative

这是我的数组,我如何按saleref排序?

Array
(
    [xml] => Array
        (
            [sale] => Array
                (
                    [0] => Array
                        (
                            [saleref] =>  12345
                            [saleline] =>   1
                            [product] => producta
                            [date] => 19/ 3/10
                            [manifest] =>       0
                            [qty] =>     1
                            [nextday] => 
                            [order_status] => 
                        )

                    [1] => Array
                        (
                            [saleref] =>  12344
                            [saleline] =>   1
                            [product] => productb
                            [date] => 18/ 3/10
                            [manifest] =>   11892
                            [qty] =>     1
                            [nextday] => 
                            [order_status] => 
                        )

4 个答案:

答案 0 :(得分:5)

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

uasort($array['xml']['sale'], 'cmp');

答案 1 :(得分:1)

如果您需要maintain index association使用uasort()

否则usort() would work

示例代码,取消了手动注释并进行了调整:

function sortSalesRef($a, $b) {

    $a = $a['saleref'];
    $b = $b['saleref'];

    if ($a == $b) {
        return 0;
    }

    return ($a < $b) ? -1 : 1;

}

usort($xml['xml']['sale'], 'sortSalesRef'); 

答案 2 :(得分:0)

E.g。使用uasort()

示例脚本:

$data = getData();
uasort($data['xml']['sale'], function($a, $b) {  return strcasecmp($a['saleref'], $b['saleref']); });
print_r($data);

function getData() {
return array(
  'xml' => array(
    'sale' => array (
      array(
        'saleref' => '12345',
        'saleline' => 1,
        'product' => 'producta',
        'date' => '19/ 3/10',
        'manifest' => 0,
        'qty' => 1,
        'nextday' => false,
        'order_status' => false
      ),

      array(
        'saleref' => '12344',
        'saleline' => 1,
        'product' => 'productb',
        'date' => '18/ 3/10',
        'manifest' => 11892,
        'qty' => 1,
        'nextday' => false,
        'order_status' => false
      )
    )
  )
);
}

答案 3 :(得分:0)

<?php
// Comparison function
function cmp($a, $b)
{
    if ($a == $b)
        {
            return 0;
        }
     return ($a < $b) ? -1 : 1;
}
$array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
print_r($array);
uasort($array, 'cmp');
print_r($array);
?>