【问题标题】:Check if the arrays variables are equal to case-insensitive form post name and determinate the German definite article in PHP检查数组变量是否等于不区分大小写的表单帖子名称并确定PHP中的德语定冠词
【发布时间】:2017-10-21 16:14:34
【问题描述】:

我建立了一个表格,要求你用德语写一个单词,它会告诉你应该使用哪个定冠词。

我使用了三个问题的数组:

这是我的代码:

<form action="index.php" method="post">
  <input type="text" class="form-control" id="word" name="word" placeholder="Word">    
  <button type="submit" class="btn btn-secondary">See</button>    
</form>

<?php 
 if ($_SERVER['REQUEST_METHOD'] === 'POST') 
 {

  $word = $_POST["word"];

  $das = ["Kind", "Licht", "Mädchen"];
  $der = ["Hund", "Kater", "Mann", "Storm", "Winter"];
  $die = ["Dame", "Frau", "Katze"];

  sort($word);
  sort($das);
  sort($der);
  sort($die);

  if ($word == $das)
  {
     echo "It is a <b>das</b>.";
  }

  elseif ($word == $der) 
  {
     echo "It is a <b>der</b>.";
  }

  else 
   {
     echo "It is a <b>die</b>.";
   }
 }

?>

【问题讨论】:

标签: php arrays


【解决方案1】:

看来您需要in_array 函数,而根本不需要sort

<form action="index.php" method="post">
  <input type="text" class="form-control" id="word" name="word" placeholder="Word">    
  <button type="submit" class="btn btn-secondary">See</button>    
</form>

<?php 
 if ($_SERVER['REQUEST_METHOD'] === 'POST') 
 {

  $word = $_POST["word"];

  $das = ["Kind", "Licht", "Mädchen"];
  $der = ["Hund", "Kater", "Mann", "Storm", "Winter"];
  $die = ["Dame", "Frau", "Katze"];

  if (in_array($word, $das))
  {
     echo "It is a <b>das</b>.";
  }

  elseif (in_array($word, $der)) 
  {
     echo "It is a <b>der</b>.";
  }

  elseif (in_array($word, $die))  
  {
     echo "It is a <b>die</b>.";
  }
 }

?>

【讨论】:

  • in_array 不会忽略不区分大小写的字符串比较。只有sort 忽略。
【解决方案2】:

你可以用这个

$word = $_POST["word"];
$word=explode(" ",$word);
$das = ["Kind", "Licht", "Mädchen"];
$der = ["Hund", "Kater", "Mann", "Storm", "Winter"];
$die = ["Dame", "Frau", "Katze"];
$das = array_map('strtolower', $das);
$der = array_map('strtolower', $der);
$die = array_map('strtolower', $die);
$word = array_map('strtolower', $word);

【讨论】:

    【解决方案3】:

    你可以试试这个

    <?php 
    if ($_SERVER['REQUEST_METHOD'] === 'POST') 
    {
    
        $word = $_POST["word"];
        $word=explode(" ",$word);
        $das = ["Kind", "Licht", "Mädchen"];
        $der = ["Hund", "Kater", "Mann", "Storm", "Winter"];
        $die = ["Dame", "Frau", "Katze"];
    
        $check1 = ($word == $das); 
        $check2 = ($word == $der); 
        if ($check1==true)
        {
            echo "It is a <b>das</b>.";
        }
    
        elseif ($check2==true) 
        {
            echo "It is a <b>der</b>.";
        }
    
        else 
        {
            echo "It is a <b>die</b>.";
        }
    }
    
    ?>
    

    【讨论】:

    • 它不适用于sort,它忽略了不区分大小写的单词的差异。
    【解决方案4】:

    由于这是您要经常解析的内容,因此请将小写的单词存储在您的脚本中。不要使用排序,如果您有很多单词(并且不打算使用某种数据库),请将它们存储为数组键并使用isset()

    我还冒昧地概括了检查不同类型的代码,这样您就不必在下面进一步区分每种类型的词组(.. 所以将来它会变得微不足道添加新组,例如检测各种形式的动词)。

    实现(仅检查请求方法是否为 POST 是不够的 - 最好检查是否设置了 POST var):

    <form action="index.php" method="post">
      <input type="text" class="form-control" id="word" name="word" placeholder="Word">    
      <button type="submit" class="btn btn-secondary">See</button>    
    </form>
    
    <?php 
    if (!empty($_POST["word"])) 
    {
      $word = strtolower($_POST["word"]); // be aware, this might not be locale aware for german letters. Look at IntlChar::toLower for proper support with UTF-8.
    
      $dictionary = [
        "das" => ["kind", "licht", "mädchen"],
        "der" => ["hund", "kater", "mann", "storm", "winter"],
        "die" => ["dame", "frau", "katze"];
      ];
    
      $found = false;
    
      foreach ($dictionary as $group => $words)
      {
        if (in_array($words, $word)) 
        {
          echo "It is a <b>" . $group . "</b>.";
          $found = true;
          break;
        }
      }
    
      if (!$found)
      {
        echo "Not found.";
      }
    }
    

    【讨论】:

    • 我用你的代码做了一个测试......你把;放在字典的括号之前吗? ; 需要在字典的括号中关闭吗? PHP 7.2 告诉有一个遗漏的括号。
    • 是的,那里应该有一个;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多