@@ -47,6 +47,14 @@ public static function fromMembers(iterable $members = []): self
4747 return new self (...$ newMembers );
4848 }
4949
50+ private static function filterMember (InnerList |Item |ByteSequence |Token |bool |int |float |string $ member ): InnerList |Item
51+ {
52+ return match (true ) {
53+ $ member instanceof InnerList, $ member instanceof Item => $ member ,
54+ default => Item::from ($ member ),
55+ };
56+ }
57+
5058 /**
5159 * Returns an instance from an HTTP textual representation.
5260 *
@@ -116,14 +124,6 @@ public function unshift(InnerList|Item|ByteSequence|Token|bool|int|float|string
116124 $ this ->members = [...array_map (self ::filterMember (...), $ members ), ...$ this ->members ];
117125 }
118126
119- private static function filterMember (InnerList |Item |ByteSequence |Token |bool |int |float |string $ member ): InnerList |Item
120- {
121- return match (true ) {
122- $ member instanceof InnerList, $ member instanceof Item => $ member ,
123- default => Item::from ($ member ),
124- };
125- }
126-
127127 /**
128128 * Insert members at the end of the list.
129129 */
@@ -157,25 +157,30 @@ public function insert(
157157 */
158158 public function replace (int $ index , InnerList |Item |ByteSequence |Token |bool |int |float |string $ member ): void
159159 {
160- if (! $ this ->has ($ index )) {
160+ if (null === ( $ offset = $ this ->filterIndex ($ index) )) {
161161 throw InvalidOffset::dueToIndexNotFound ($ index );
162162 }
163163
164- $ this ->members [$ this -> filterIndex ( $ index ) ] = self ::filterMember ($ member );
164+ $ this ->members [$ offset ] = self ::filterMember ($ member );
165165 }
166166
167167 /**
168168 * Delete members associated with the list of instance indexes.
169169 */
170170 public function remove (int ...$ indexes ): void
171171 {
172- foreach (array_map (fn (int $ index ): int |null => $ this ->filterIndex ($ index ), $ indexes ) as $ index ) {
173- if (null !== $ index ) {
174- unset($ this ->members [$ index ]);
175- }
172+ $ offsets = array_filter (
173+ array_map (fn (int $ index ): int |null => $ this ->filterIndex ($ index ), $ indexes ),
174+ fn (int |null $ index ): bool => null !== $ index
175+ );
176+
177+ foreach ($ offsets as $ offset ) {
178+ unset($ this ->members [$ offset ]);
176179 }
177180
178- $ this ->members = array_values ($ this ->members );
181+ if ([] !== $ offsets ) {
182+ $ this ->members = array_values ($ this ->members );
183+ }
179184 }
180185
181186 /**
0 commit comments