Jump to content


This topic is now archived and is closed to further replies.


Sorting multidimensional array by multiple fields

Recommended Posts

The scenario:

1. flatfile database
      consists of records delimited by carriage returns.
      records have fields delimited by commas

      example of file structure and content:
        1,Nicholas,,Stoia,6992 Biscayne,White Lake,MI,48383,1,13,1946,,,,,,,
        3,Sharon,Marie,Stoia,6992 Biscayne,White Lake,MI,48383,7,16,1955,,,,,,,
        4,Jonathon,Hunter,Stoia,6992 Biscayne,White Lake,MI,48383,12,13,1988,,,,,,,
        6,Gilbert,Rial,Stebbins,22600 Bluewater Drive,Macomb Twp,MI,48044,0,0,0,,,,,,,
        7,Beverly,,Stebbins,22600 Bluewater Drive,Macomb Twp,MI,48044,0,0,0,,,,,,,
        8,Sean,Michael,Dean,167 Weston Road,Wellesley,MA,02482,0,0,0,,,,,,,

2. multidimensional array created as follows:

        // read file into array
        $file = file("faf.txt");
        $count = count($file);

        // convert first array to multidimensional array
        $i = 0;
        for($i=0;$i<$count;$i++) {
        $file_cards[$i] = explode(",", $file[$i]);

3. sort by last name (

        function compare($x, $y){
          if ( $x[3] == $y[3] )
            return 0;
          else if ( $x[3] < $y[3] )
            return -1;
            return 1;

        usort($file_cards, 'compare');

The Question:

The above works fine; however,
in addition to sorting by last name [code]$file_cards[x][3] [/code]
I would like to further sort by first name [code]$file_cards[x][1][/code]
and then by middle name [code]$file_cards[x][2] [/code].




Share this post

Link to post
Share on other sites
Well, one way would be to format the key as the full name:

[code]$file = file("faf.txt");

foreach ($file as $line) {
$line = explode(",", $line);
$name = $line[0] . ", " . $line[1] . ", " . $line[2];
$data[$name] = $line;


Share this post

Link to post
Share on other sites


Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.