Thanks Torben,

I've been messing about with code all afternoon, and my mind is blitzed. 
Didn't think it was possible since there was no way I could access the first 
name part (after I accessed the surname) since it had no delimiter except 
spaces. Managed to get the surname in a sorted array, but couldn't manage to 
merge the first names. 

I'll try this code -- hope it works, and get back to you!

Thanks again!

Andre



On Thursday 24 June 2004 11:21 pm, Lars Torben Wilson wrote:
> Andre Dubuc wrote:
> > Given a text string:
> >
> > $OK = "Joe Blow, William Howard Anser, Hannie Jansen, etc, etc,";
>
> [snip]
>
> > How would I get this 'before_last' function to iterate through the
> > initial string, so I could build a sorted list with both first and last
> > names, sorted by last name? I can't seem to get a proper 'foreach'
> > statement to work, nor a 'while' statement.
>
> There are few different ways. Here's one:
>
> ---------------------------------------------------------------------------
>---- function splitSortNames($namePartSeparator,
>                          $nameSeparator,
>                          $nameString)
> {
>      preg_match_all('/(\w+)((\s(\w+)\s)*(\s?(\w+)))*/',
>                     $nameString,
>                     $tmp_names,
>                     PREG_SET_ORDER);
>      $names = array();
>      foreach ($tmp_names as $i => $name)
>      {
>          $tmp = array();
>          if (!empty($name[6])) $tmp[1] = $name[6];
>          if (!empty($name[1])) $tmp[2] = $name[1];
>          if (!empty($name[4]))
>          {
>              $tmp[2] .= ' ' . $name[4];
>          }
>          $names[$name[0]] = join(', ', $tmp);
>      }
>      asort($names);
>      $names = array_keys($names);
>      return $names;
> }
>
> $names = splitSortNames(' ', ', ', $OK);
> print_r($names);
> ---------------------------------------------------------------------------
>----
>
> To check out a few other ideas along with a short (likely inaccurate) speed
> test, check out http://www.thebuttlesschaps.com/sortByLast.html (there is
> a 'View Source' link at the bottom of the page).
>
> This code returns the names in the format in which they are given. You
> can speed it up a bit by having it return the names in 'lastname,
> firstname' format. For this, change
>
>          $names[$name[0]] = join(', ', $tmp);
>
> to
>
>          $names[$i] = join(', ', $tmp);
>
> and remove the lines:
>
>      asort($names);
>      $names = array_keys($names);
>
> > I'm really confused. I've read almost every entry on arrays/strings and
> > searched code snippets. Almost all focus on one element arrays such
> > "apple, orange, peach" rather than 2 or more elements such as  "fancy
> > cars, big trucks, fast dangerous motorcycles,"
> >
> > Is it even possible to accomplish this type sort on a string?
> >
> >
> >
> > Any advice, pointers, or help will be greatly appreciated,
> > Tia,
> > Andre
>
> Hopefully the code above will give you some aid--and you can probably
> improve on that regexp in preg_match_all().  The other 2 ways on the site
> have totally different methods, and different strengths and weaknesses.
> Maybe you can turn one of them into something useful to you.
>
>
> Hope this helps,
>
> Torben
>
>
> --
> Torben Wilson <[EMAIL PROTECTED]>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to