0

I'm trying to sort through an array first by [artist][0][name], then by [datetime] so I end up with something like

9/25 - Artist1
9/26 - Artist1
9/27 - Artist1
9/25 - Artist2
9/26 - Artist2
9/27 - Artist2
...

This is how I get the data from the feed:

Array
(
[0] => Array
    (
        [ticket_url] => ...
        [on_sale_datetime] => ...
        [ticket_status] => ...
        [url] => ...
        [venue] => Array
            (
                [longitude] => ...
                [region] => ...
                [city] => ...
                [url] => ...
                [country] => ...
                [id] => ...
                [latitude] => ...
                [name] => ...
            )

        [artists] => Array
            (
                [0] => Array
                    (
                        [mbid] => ...
                        [url] => ...
                        [name] => ...
                    )

            )

        [datetime] => ...
        [id] => ...
    )
)

I can sort by [name] just fine but can't figure out how to get the [datetime] to go in order along with each [name]. Here's what I have so far:

    $object = $x->eventSearch($artists, $location, null, "$today,$next_week", 1, 100);

    $array = objectToArray($object);

    usort($array, function($a, $b) {
        return strcmp($a['artists'][0]['name'], $b['artists'][0]['name']);
    });

    foreach ($array as $key => $val)
    {

        $main_artist = $val[artists][0][name];

        $dateofevent = date("m/d", strtotime($val[datetime]));
        $venue_city = $val[venue][city];
        $venue_region = $val[venue][region];
        $venue_name = $val[venue][name];
        ?>
        <tr>
            <td><?php echo $dateofevent; ?></td>
            <td><?php echo $main_artist; ?></td>
            <td><?php echo $venue_city . ", " . $venue_region; ?></td>
            <td><?php echo $venue_name; ?></td>
        </tr>
    <?php } ?>

Any insight would be greatly appreciated.

1 Answers1

0

Do something like the following to sort by artist name, and then date/time.

usort($array, function($a, $b) {
    $s = strcmp($a['artists'][0]['name'], $b['artists'][0]['name']);
    if($s != 0 ) { return $s; }
    datetime_comparison_here(); // your example data is helpfully '...'
});
Sammitch
  • 30,782
  • 7
  • 50
  • 77
  • Thanks, I ended up doing like this: function cmp($a, $b) { if(strcmp($a['artists'][0]['name'], $b['artists'][0]['name'])) { return strcmp($a['artists'][0]['name'], $b['artists'][0]['name']); } return strcmp($a['datetime'], $b['datetime']); } usort($array, "cmp"); – user3508214 Sep 25 '14 at 17:54