views:

94

answers:

4

Here's my array, how do I sort it by 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] => 
                        )
A: 

E.g. by using uasort()

example script:

$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
      )
    )
  )
);
}
VolkerK
+1  A: 
function cmp($a, $b) {
    if ($a['saleref'] == $b['saleref']) {
        return 0;
    }
    return ($a['saleref'] < $b['saleref']) ? -1 : 1;
}

uasort($array['xml']['sale'], 'cmp');
Andy
+1  A: 

If you need to maintain index association use uasort().

Otherwise usort() would work

Example code, lifted from manual comments and tweaked:

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'); 
Greg K
A: 
<?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);
?>
muruga