/** * Get a segment of a string based on a delimiter. * Use a negative index to start counting from the last element. * * @param string $string * @param string $delimiter * @param int $index * @return string */ function str_segment($string, $delimiter, $index) { return Str::segment($string, $delimiter, $index); }
* @return string */ Str::macro('firstSegment', function ($string, $delimiter) { return Str::segment($string, $delimiter, 1); }); } if (!Str::hasMacro('lastSegment')) { /** * Get the last segment of a string based on a delimiter. * * @param string $string * @param string $delimiter * @return string */ Str::macro('lastSegment', function ($string, $delimiter) { return Str::segment($string, $delimiter, -1); }); } if (!Str::hasMacro('pop')) { /** * Pop off the last segment of a string based on a delimiter. * Returns the remaining string. * * @param string $string * @param string $delimiter * @return string */ Str::macro('pop', function ($string, $delimiter) { return Str::replaceLast($delimiter . Str::lastSegment($string, $delimiter), '', $string); }); }
public function test_str_segment() { $string = Str::segment('path/to/route', '/', 2); $this->assertEquals('to', $string); $string = Str::segment('path/to/route', '/', -1); $this->assertEquals('route', $string); $string = Str::segment('pathtoroute', '/', 2); $this->assertEquals('', $string); $string = Str::segment('path/to/route/', '/', 4); $this->assertEquals('', $string); $string = Str::segment('', '/', 2); $this->assertEquals('', $string); }