diff --git a/src/Analyser/ExprHandler/AssignHandler.php b/src/Analyser/ExprHandler/AssignHandler.php index c0dade166a0..746d7777638 100644 --- a/src/Analyser/ExprHandler/AssignHandler.php +++ b/src/Analyser/ExprHandler/AssignHandler.php @@ -1912,7 +1912,7 @@ private function shouldKeepList(ArrayDimFetch $arrayDimFetch, Scope $scope, Type $arrayDimFetch->dim instanceof Expr\FuncCall && $arrayDimFetch->dim->name instanceof Name && $arrayDimFetch->dim->name->toLowerString() === 'array_search' - && count($arrayDimFetch->dim->getArgs()) >= 1 + && count($arrayDimFetch->dim->getArgs()) >= 2 // the haystack is the second argument && $this->isSameVariable($arrayDimFetch->var, $arrayDimFetch->dim->getArgs()[1]->value) ) { return true; diff --git a/tests/PHPStan/Analyser/nsrt/array-search-offset-argument-count.php b/tests/PHPStan/Analyser/nsrt/array-search-offset-argument-count.php new file mode 100644 index 00000000000..639d684d7de --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/array-search-offset-argument-count.php @@ -0,0 +1,24 @@ +|int<3, max>|string, 4>}', $list); +} + +/** + * @param array{int, list} $args + */ +function unpackedArguments(array $args): void +{ + $list = [1, 2, 3]; + $list[array_search(...$args)] = 4; + assertType('array{1|4, 2|4, 3|4, ...|int<3, max>|string, 4>}', $list); +}