$maxLength) { return substr($string, 0, $maxLength - strlen($ellipsis)) . $ellipsis; } return $string; } /** * Add ellipsis in the center of a string when a string is longer than max length * * @param string $string * @param int $maxLength * @param string $ellipsis * * @return string */ public static function ellipsisCenter($string, $maxLength, $ellipsis = '...') { $start = ceil($maxLength / 2.0); $end = floor($maxLength / 2.0); if (strlen($string) > $maxLength) { return substr($string, 0, $start - strlen($ellipsis)) . $ellipsis . substr($string, - $end); } return $string; } /** * Find and return all similar strings in $possibilites matching $string with the given minimum $similarity * * @param string $string * @param array $possibilities * @param float $similarity * * @return array */ public static function findSimilar($string, array $possibilities, $similarity = 0.33) { if (empty($string)) { return array(); } $matches = array(); foreach ($possibilities as $possibility) { $distance = levenshtein($string, $possibility); if ($distance / strlen($string) <= $similarity) { $matches[] = $possibility; } } return $matches; } /** * Check if a string ends with a different string * * @param $haystack The string to search for matches * @param $needle The string to match at the start of the haystack * * @return bool Whether or not needle is at the beginning of haystack */ public static function endsWith($haystack, $needle) { return $needle === '' || (($temp = strlen($haystack) - strlen($needle)) >= 0 && false !== strpos($haystack, $needle, $temp)); } /** * Generates an array of strings that constitutes the cartesian product of all passed sets, with all * string combinations concatenated using the passed join-operator. * *
* cartesianProduct( * array(array('foo', 'bar'), array('mumble', 'grumble', null)), * '_' * ); * => array('foo_mumble', 'foo_grumble', 'bar_mumble', 'bar_grumble', 'foo', 'bar') ** * @param array $sets An array of arrays containing all sets for which the cartesian * product should be calculated. * @param string $glue The glue used to join the strings, defaults to ''. * * @returns array The cartesian product in one array of strings. */ public static function cartesianProduct(array $sets, $glue = '') { $product = null; foreach ($sets as $set) { if (! isset($product)) { $product = $set; } else { $newProduct = array(); foreach ($product as $strA) { foreach ($set as $strB) { if ($strB === null) { $newProduct []= $strA; } else { $newProduct []= $strA . $glue . $strB; } } } $product = $newProduct; } } return $product; } }