From 4df658fc1c4a0ddd76e57ca0ee8350b70c9a823c Mon Sep 17 00:00:00 2001 From: Valithor Obsidion Date: Wed, 25 Dec 2024 10:44:20 -0500 Subject: [PATCH] Optimize $params using array_reduce --- src/SegmentRouter.php | 46 ++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/SegmentRouter.php b/src/SegmentRouter.php index 5247c68..c22b63c 100644 --- a/src/SegmentRouter.php +++ b/src/SegmentRouter.php @@ -78,31 +78,33 @@ class SegmentRouter implements RouterInterface } // params will hold any dynamic segments we find - $params = []; - - // We'll split up the URI into segments and traverse the node tree - foreach (explode('/', trim($uri, '/')) as $segment) { - // if there is a node for this segment, move to it - if (isset($node[$segment])) { - $node = $node[$segment]; - continue; - } - - // if there is a dynamic segment, move to it and store the value - if (isset($node[':x'])) { - $params[] = $segment; - $node = $node[':x']; - continue; - } - - // if we can't find a node for this segment, return 404 - return ['code' => 404, 'handler' => null, 'params' => []]; - } + $params = array_reduce( + explode('/', trim($uri, '/')), + function ($carry, $segment) use (&$node) { + if (isset($node[$segment])) { + $node = $node[$segment]; + } elseif (isset($node[':x'])) { + $carry[] = $segment; + $node = $node[':x']; + } else { + throw new \Exception('404'); + } + return $carry; + }, + [] + ); // if we found a handler for the method, return it and any params. if not, return a 405 return isset($node[$method]) - ? ['code' => 200, 'handler' => $node[$method], 'params' => $params ?? []] - : ['code' => 405, 'handler' => null, 'params' => []]; + ? [ + 'code' => 200, + 'handler' => $node[$method], + 'params' => $params ?? []] + : [ + 'code' => 405, + 'handler' => null, + 'params' => [] + ]; } /**