Harfish Posted May 26, 2006 Share Posted May 26, 2006 I'm not even sure if this is possible but here goes. I have a website that uses PHP to produce a list of names from a MySQL database. However, a basic design decision I made a long time ago seems to have some back to haunt me. The names in the database are in the format 'J Bloggs' and when these are sorted into alphabetical order they are sorted by first initial. Is there a simple way to sort these names by last name? I've tried a couple of things, but neither of those worked quite right. I've tried splitting the names into an associative array, eg J => Bloggs, but this didn't work because some of the last names are the same.Am I going to have to redesign my database? Or is it possible to sort and array by the third character of each value? Quote Link to comment https://forums.phpfreaks.com/topic/10477-sorting-values-in-an-array/ Share on other sites More sharing options...
poirot Posted May 26, 2006 Share Posted May 26, 2006 Hmmm... If you can split them into array, then you can use one of the array sorting function. I am a bit lazy to find what you need, but one of them should work:uksort(), usort(), uasort(), sort(), asort(), arsort(), ksort(), natsort(), and rsort().EDIT: In your case, asort() should do it:[a href=\"http://www.php.net/asort\" target=\"_blank\"]http://www.php.net/asort[/a] Quote Link to comment https://forums.phpfreaks.com/topic/10477-sorting-values-in-an-array/#findComment-39112 Share on other sites More sharing options...
Barand Posted May 26, 2006 Share Posted May 26, 2006 As long as they all have that same format of a single initial and lastname[code]SELECT SUBSTRING(name, 3) as lastname, SUBSTRING(name,1,1) as initial FROM mytablenameORDER BY surname, initial[/code] Quote Link to comment https://forums.phpfreaks.com/topic/10477-sorting-values-in-an-array/#findComment-39145 Share on other sites More sharing options...
Harfish Posted May 31, 2006 Author Share Posted May 31, 2006 Wow Barand! Thanks, that worked beautifully. But now I've discovered I've got another problem. I have another SQL query on that page that selects 2 names and generates a list. Up until a few weeks ago this list was horribly out of order because when I wrote the php initially I had neither the skill nor the time to fix that. Now I do and have the list sorted by first initial. [code]$today = date("Y-m-d");$result = mysql_query("SELECT DISTINCT name1,name2 FROM names WHERE date>='$today' AND tjs='Y'",$db);$tjs = array();while ($myrow = mysql_fetch_array($result)) {$tj1 = $myrow['name1'];$tj2 = $myrow['name2'];array_push($tjs,$name1);array_push($tjs,$name2);}sort($tjs);foreach ($tjs as $value){printf("<option value=\"$value\">$value</option>\n");}[/code]But I can't for the life of my figure out how to sort this list by surname, which is the 3rd character of the name. Any suggestions? Quote Link to comment https://forums.phpfreaks.com/topic/10477-sorting-values-in-an-array/#findComment-40419 Share on other sites More sharing options...
Barand Posted May 31, 2006 Share Posted May 31, 2006 Use a custom sort function with usort().[code]function namesort($a, $b) { return strcmp(substr($a,2), substr($b,2));}usort ($tjs, 'namesort');[/code] Quote Link to comment https://forums.phpfreaks.com/topic/10477-sorting-values-in-an-array/#findComment-40465 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.