You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:33:01