1

I've got an multidimensional array which is build like this:

array(
    array(
        'zahlungen_id' => 1,
        'reise_id' => 1,
        'name' => 'Liam Schnell',
        'schul_id' => 1,
        'summe' => 49,
        'art' => 'PayPal',
        'sicher' => 0,
        'datum' => '2014-05-05'
    ),
    array(
        'zahlungen_id' => 2,
        'reise_id' => 3,
        'name' => 'Max Göllner',
        'schul_id' => 1,
        'summe' => 49,
        'art' => 'SOFORT',
        'sicher' => 1,
        'datum' => '2014-05-06'
    ),
    array(
        'zahlungen_id' => 3,
        'reise_id' => 2,
        'name' => 'Sasha Novalja',
        'schul_id' => 2,
        'summe' => 49,
        'art' => 'Kreditkarte',
        'sicher' => 1,
        'datum' => '2014-05-05'
    ),
    array(
        'zahlungen_id' => 4,
        'reise_id' => 1,
        'name' => 'Hans Wurst',
        'schul_id' => 1,
        'summe' => 49,
        'art' => 'Sofort',
        'sicher' => 0,
        'datum' => '2014-05-04'
    )
);

Is there any way I can use 'schul_id' to sort the array itself? Like a descending schul_id?

Anthony
  • 36,459
  • 25
  • 97
  • 163
Liam Schnell
  • 474
  • 8
  • 25

3 Answers3

1

First comment was right! I used this one

function aasort(&$array, $key) {
    $sorter = array();
    $ret = array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii] = $va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii] = $array[$ii];
    }
    $array = $ret;
}
Liam Schnell
  • 474
  • 8
  • 25
1

You are looking for uasort:

function cmp($a, $b) { if ($a["schul_id"] == $b["schul_id"]) { return 0; } return ($a["schul_id"] > $b["schul_id"]) ? -1 : 1; } uasort($array, 'cmp');

Victor Henriquez
  • 1,399
  • 15
  • 26
1

array_multisort covers this, here's a sample from their docs tweaked to your question:

foreach($data as $key => $row) {
    $schul_id[$key] = $row['schul_id'];
}

array_multisort($schul_id, SORT_DESC, $data);

print_r($data);
Anthony
  • 36,459
  • 25
  • 97
  • 163