public function test_str_firstSegment() { $string = Str::firstSegment('path/to/route', '/'); $this->assertEquals('path', $string); $string = Str::firstSegment('pathtoroute', '/'); $this->assertEquals('pathtoroute', $string); $string = Str::firstSegment('/path/to/route', '/'); $this->assertEquals('', $string); $string = Str::firstSegment('', '/'); $this->assertEquals('', $string); }
* @param string $string * @param string $delimiter * @param int $nth * @return string */ Str::macro('segment', function ($string, $delimiter, $nth) { $segments = explode($delimiter, $string); if ($nth < 0) { $segments = array_reverse($segments); $nth = abs($nth) - 1; } elseif ($nth == 0) { $nth++; } else { $nth--; } return isset($segments[$nth]) ? $segments[$nth] : ''; }); } if (!Str::hasMacro('shift')) { /** * Shift off the first segment of a string based on a delimiter. * Returns the remaining string. * * @param string $string * @param string $delimiter * @return string */ Str::macro('shift', function ($string, $delimiter) { return Str::replaceFirst(Str::firstSegment($string, $delimiter) . $delimiter, '', $string); }); }
/** * Get the first segment of a string based on a delimiter. * * @param string $string * @param string $delimiter * @return string */ function str_firstSegment($string, $delimiter) { return Str::firstSegment($string, $delimiter); }