php - 如何在 PHP 中为用户输入提供默认值?

标签 php command-line-interface readline

是否有与 BASH 中的 read -i 相同的 PHP 功能,以便脚本可以提示用户并提供如下默认答案:

Are you doing ok? (yes/no): yes

其中“”是脚本提供的默认答案,用户可以删除并输入另一个答案。

readline功能似乎没有它所需要的。还有其他方法可以做到这一点吗?

使用流似乎也不起作用:

<?php
echo "Are you doing ok? (yes/no): ";
$in = fopen('php://stdin', 'rw+');
fputs($in, 'yes'); // should be the default?
$answer = fgets($in);
fclose($in);
echo "\nYou entered: {$answer}\n";

fputs($in, 'yes'); 行写入的任何内容都将被忽略:

Are you doing ok? (yes/no): yes

You entered: 

我是否错误地使用了流?或者也许还有其他方法来实现默认值?

编辑:

也许我把这个例子简化太多了。真正的问题不是简单的“是/否”提示 - 这只是一个示例。让我再次强调:我的目标是提供与 read -i BASH 命令完全相同的功能。在我的具体情况下,$answer 包含一个 URL,因此我希望向用户提供 URL 的第一部分(方案、主机、端口),以便他可以添加/编辑其余(路径、查询)、片段。像这样:

Enter url: http://www.example.com/foo/

现在用户用 bar/baz 补充路径,我们得到:

You entered: http://www.example.com/foo/bar/baz 

但另一方面,用户还应该可以选择删除网址的第一部分并提供完全不同的字符串:

Enter url: ftp://www.my-super-specific-domain.com/foo/bar

最佳答案

没有内置的方法可以做到这一点,因为编写一些代码来做到这一点非常简单:

function writeQuestion($question, $answers)
{
    echo $question . ' (' . implode('/', $answers) . '): ' . PHP_EOL;
}

function readAnswer($possibleAnswers, $defaultAnswer)
{
    $in = fopen('php://stdin', 'rw+');
    $answer = trim(fgets($in));

    if(!in_array($answer, $possibleAnswers))
    {
        return $defaultAnswer;
    }

    return $answer;
}

$question = 'Are you doing ok?';
$answers = array('yes', 'no');
$defaultAnswer = 'yes';

writeQuestion($question, $answers);
$answer = readAnswer($answers, $defaultAnswer);

关于php - 如何在 PHP 中为用户输入提供默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21216561/

相关文章:

php - 如何在插入表之前检查表中是否存在值?

php - 在 PHP 中使用默认魔术引号或用户定义的 addslash/stripslash 哪个更好?

azure - az acr 运行 : error: unrecognized argument: --cmd

python - lambda 中生成器的行为对 future 的变化安全吗?

python - 以 4 为一组从巨大的文本文件中读取行

javascript - 如何将 Span Id 值放入 PHP 变量中?

php - 难道 PHP 中的 OOD 双重存储 MySQL 中的内容是一种资源浪费吗?

javascript - 如果使用 Cypress 的 CLI 命令中未声明参数之一,会引发异常吗?

linux - 无法在 Linux Mint 上安装 heroku toolbelt 路径无效

javascript readline 流关闭事件不会被触发