- sort an array of associative arrays by any associative value
- Contributed to php.net (note the todo there in the body)
 
  function assocMultiSort(&$array,$keys,$directions=true) {
    if (!is_array($array) || count($array) == 0) return true;
    if (!is_array($keys)) { $keys = Array($keys); }
    $test = current($array);
    $assocSortCompare = '';
    for ($i=0,$count=count($keys);$i<$count;$i++) {
      $key = $keys[$i];
      if (is_array($directions)) {
        $direction = $directions[$i];
      } else {
        $direction = $directions;
      }
      if ($i > 0) $assocSortCompare .= 'if ($retval != 0) return $retval; ';
      $assocSortCompare .= '$ax = $a["'.$key.'"]; $bx = $b["'.$key.'"];';
      //we want "current" instead of necessarily the "zeroth" element; there may not be a zeroth element
      //TODO -- if it's "blank", search up the list until we find something not blank
      if (is_numeric($test[$key]) || ($test[$key] == ((int)$test[$key]))) {
        if ($direction) {
          $assocSortCompare.= ' $retval = ($ax == $bx) ? 0 : (($ax < $bx) ? -1 : 1);';
        } else {
          $assocSortCompare.= ' $retval = ($ax == $bx) ? 0 : (($ax < $bx) ? 1 : -1);';
        }
      } else {
        if ($direction) {
          $assocSortCompare.= ' $retval = strcmp($ax,$bx);';
        } else {
          $assocSortCompare.= ' $retval = strcmp($bx,$ax);';
        }
      }
    }
    $assocSortCompare.= ' return $retval;';
    $assocSortCompare = create_function('$a,$b',$assocSortCompare);
    $retval = usort($array,$assocSortCompare);
    return $retval;
  }
- sort an array of associative arrays by any array of associative values
- Contributed to php.net (note: I need to update this to not depend on $array[0])
 function assocSort(&$array,$key) {
   if (!is_array($array) || count($array) == 0) return true;
   $assocSortCompare  = '$a = $a["'.$key.'"]; $b = $b["'.$key.'"];';
   if (is_numeric($array[0][$key])) {
     $assocSortCompare.= ' return ($a == $b) ? 0 : (($a < $b) ? -1 : 1);';
   } else {
     $assocSortCompare.= ' return strcmp($a,$b);';
   }
   $assocSortCompare = create_function('$a,$b',$assocSortCompare);
   return usort($array,$assocSortCompare);
}
- test for valid US phone number, and get it back formatted at the same time
- Contributed to php.net
   function getUSPhone($var) {
    $US_PHONE_PREG ="/^(?:\+?1[\-\s]?)?(\(\d{3}\)|\d{3})[\-\s\.]?"; //area code
    $US_PHONE_PREG.="(\d{3})[\-\.]?(\d{4})"; // seven digits
    $US_PHONE_PREG.="(?:\s?x|\s|\s?ext(?:\.|\s)?)?(\d*)?$/"; // any extension
    if (!preg_match($US_PHONE_PREG,$var,$match)) {
      return false;
    } else {
      $tmp = "+1 ";
      if (substr($match[1],0,1) == "(") {
        $tmp.=$match[1];
      } else {
        $tmp.="(".$match[1].")";
      }
      $tmp.=" ".$match[2]."-".$match[3];
      if ($match[4] <> '') $tmp.=" x".$match[4];
      return $tmp;
    }
  }
usage:
  $phone = $_REQUEST["phone"];
  if (!($phone = getUSPhone($phone))) {
    //error gracefully :)
  }