PHP CLI场景下for循环内readline输入验证失效问题问询
问题根因
你循环内的验证不生效是因为校验对象错误:循环里的判断逻辑依然校验的是最开始输入的$amount变量,而非每次循环新输入的数值,同时你先把输入内容存入数组再做校验,逻辑顺序也有误。
这类验证完全可以在for循环内实现,以下是两种符合你需求的解决方案:
方案1:输入错误直接退出(和你原有逻辑一致,仅修复校验错误)
$amount = readline("Enter amount of inputs: "); if (!is_numeric($amount) || !(0 < $amount)){ echo "Invalid input"; exit; } $numbers = []; for ($i = 1; $i <= $amount; $i++){ // 先接收输入暂存 $currentInput = readline("Input number {$i}: "); // 校验当前输入的内容是否符合要求 if (!is_numeric($currentInput) || $currentInput <= 0){ echo "Invalid input"; exit; } // 验证通过再存入数组 $numbers[] = $currentInput; } $largestNumbers = max($numbers); $numbersList = implode(",", $numbers); echo "The largest number of $numbersList is $largestNumbers";
方案2:输入错误后允许重新输入当前值(更友好的交互)
无需修改for循环外的逻辑,仅调整循环内的步进规则即可实现,输入错误时不会进入下一个输入项:
$amount = readline("Enter amount of inputs: "); if (!is_numeric($amount) || !(0 < $amount)){ echo "Invalid input"; exit; } $numbers = []; // 把$i++的逻辑移到验证通过的分支中 for ($i = 1; $i <= $amount; ){ $currentInput = readline("Input number {$i}: "); if (!is_numeric($currentInput) || $currentInput <= 0){ echo "Invalid input, please try again\n"; continue; } $numbers[] = $currentInput; $i++; } $largestNumbers = max($numbers); $numbersList = implode(",", $numbers); echo "The largest number of $numbersList is $largestNumbers";
内容的提问来源于stack exchange,提问作者Goaul
相关产品推荐
相关产品推荐

