【问题标题】:PHP - Run through If statements, if none are true, echo a random variablePHP - 运行 If 语句,如果没有一个为真,则回显一个随机变量
【发布时间】:2012-08-02 14:30:19
【问题描述】:

好吧,我想做的有点独特,我在网上找不到任何可以指导我的东西,所以希望我能很好地解释它。

问题:

我在 PHP 中有一系列 if 语句。为简化起见,每个 if 语句如下所示:

if($product_name == 'shoe') {
     $shoe_description = '<p>Shoe description</p>';
     echo $shoe_description;
}
else if($product_name == 'car') {
     $car_description = '<p>Car description</p>';
     echo $car_description;
}
else if($product_name == 'bottle') {
     $bottle_description = '<p>Bottle description</p>';
     echo $bottle_description;
}

只要将$product_name 定义为我的变量之一,它就可以正常工作。我想做的是,作为最后一条语句,说“如果product_name 与我的任何变量都不匹配,则显示上面的随机描述”;所以我将在上述代码的末尾添加一个最终的else 语句(示例 - 不工作的代码):

else {
     // Show one of the echo strings from above (i.e. $car_description)
     //but pick randomly
}

问题:

我需要编辑/添加什么代码,以便最后的 else 语句选择 3 个 description 变量之一,以便我可以在页面上 echo 它?

【问题讨论】:

  • 你确定这是你的代码吗? $product_name = 'shoe' 可能像这样更好:$product_name == 'shoe' ?否则没有太大意义
  • @Nanne 谢谢我更新了它。我简化了代码以使其更易于解释。

标签: php variables random echo


【解决方案1】:

这是对您给出的逻辑的基本重写。您通常可以将一系列 if 语句改写为更简单的逻辑,或改写为 switch 语句——这取决于您要完成的工作。在这种情况下,我会检查 $product_name 是否有描述,否则只需选择一个随机键。

$product_name = $_SESSION['product_name'];

$descriptions = array(
    'shoe' => '<p>Shoe description</p>',
    'car' => '<p>Car description</p>',
    'bottle' => '<p>Bottle description</p>',
);

if(isset($product_name) && isset($descriptions[$product_name])) {
    echo $descriptions[$product_name];
} else {
    echo $descriptions[array_rand($descriptions)];
}

【讨论】:

  • 哇,你发布的正是我写的答案!
  • 哈哈,不错 :) 以同样的方式思考 :)
  • @AlexanderLarikov 同意。这就是我们来这里的目的。
  • @Ignas 这只是为了说明它的外观。内部描述无关紧要:)
  • @AdamD 如果变量来自另一个脚本,您可能需要global $product_name。这必须是此代码所在的脚本/方法的本地。
【解决方案2】:
$descriptions = array(
    'shoe' => '<p>Shoe description</p>',
    'car' => '<p>Car description</p>',
    'bottle' => '<p>Bottle description</p>'
);

if(isset($product_name) && isset($descriptions[$product_name])){
    echo $descriptions[$product_name];
} else {
    echo $descriptions[array_rand($descriptions)];
}

【讨论】:

  • 这实际上是在检查 $product_name 的设置吗?
  • 我的代码满足 OP 的条件"if product_name matches none of my variables, show a random description from above"。好吧,我重写了代码以更接近 OP 想要的
  • 你能解释一下if(isset($product_name) &amp;&amp; isset($descriptions[$product_name]))实际上在检查什么吗?谢谢
  • 基本上它的简单英语:) 可以从英语翻译成我的坏英语为“如果$product_name 存在并且如果$descriptions 数组包含一个值为$product_name 的键,则取值来自带有$product_name 变量的键的数组”因此,如果$product_name 等于“汽车”,您将获得“汽车”的描述。我建议你学习编程的基础知识。 arrays
  • 我了解代码的工作原理。我不需要低强度的打击。您的代码不起作用。
【解决方案3】:

我认为最简单的方法是将您的产品和描述放在键/值对数组中。

这样您可以缩短 if 语句,并在 else 情况下随机选择一个(通过生成随机索引),而无需两次定义您的描述。

-- 编辑--

Robert K/Alexander Larikov 打败了我 :) 查看他们的示例代码。

【讨论】:

  • 检查我的 cmets 的答案 - 似乎人们太忙于召集而不是解释大声笑
  • @AdamD isset 检查变量是否已设置,而不是 NULL。因此,在给定的代码中,他们检查是否设置了$product_name,然后检查是否设置了$descriptions[$product_name](因此,如果$product_name 在数组中),则根据$product_name 返回相应的文本, 否则它将从数组中获取一个随机值。
【解决方案4】:

我会这样做

if(!$product_name){
      $options = array('shoe','car','bottle');
      $product_name = array_rand($options);
}
//your code here.

【讨论】:

  • 这个实现没有问题。然而,与我们几个人的想法相比,它确实需要额外的逻辑。
  • 我选择这个是因为 OP 的代码是(我认为)真实代码的一些抽象。这最接近 OP 已经“拥有”的内容,因此可能更容易合并。
【解决方案5】:

试试这个:

<?php
//$product_name = ...
$list = array('shoe' => 'Shoe description', 'car' => 'Car description', 'bottle' => 'Bottle description');
echo '<p>';
if (isset($list[$product_name])) {
   echo $list[$product_name];
} else {
   echo $list[array_rand($list)];
}
echo '</p>';
?>

【讨论】:

    【解决方案6】:

    您可以将所有瓶子描述放入一个数组中,如果您点击最终的else,只需从数组中提取一个随机值

    $descriptions   = array(
        'shoe'      => 'Shoe description',
        'car'       => 'Car description',
        'bottle'    => 'Bottle description'
    );
    
    if($product_name = 'shoe') {
         $shoe_description = '<p>'.$descriptions[$product_name].'</p>';
         echo $shoe_description;
    }
    else if($product_name = 'car') {
         $car_description = '<p>'.$descriptions[$product_name].'</p>';
         echo $car_description;
    }
    else if($product_name = 'bottle') {
         $bottle_description = '<p>'.$descriptions[$product_name].'</p>';
         echo $bottle_description;
    }
    else {
        echo '<p>'.$descriptions[array_rand($descriptions)].'</p>';
    }
    

    【讨论】:

    • Patrick, array_rand 将返回键,而不是值。看我的回答。
    【解决方案7】:

    我认为你可以做到以下几点:

    $product_names = array('shoe', 'car', 'bottle');
    if (!in_array($product_name, $product_names))
        $product_name = $product_names[rand(0,2)];
    

    然后添加您的代码。

    【讨论】:

      【解决方案8】:

      我会为此使用 switch 语句。

      $strings = array('<p>Shoe description</p>', '<p>Car description</p>', '<p>Bottle description</p>');
      
      switch($product_name)
      {
      case "shoe":
      echo $strings[0];
      break;
      
      case "car":
      echo $strings[1];
      break;
      
      case "bottle":
      echo $strings[2];
      break;
      
      default:
      echo $strings[rand(0,2)];
      break;
      }
      

      【讨论】:

      • 我很抱歉,但是,对于否决票是认真的吗?这适用于 OP 的问题,如果 product_name 不匹配,则默认为随机字符串。
      • 这是一种非常丑陋和错误的方式来做 OP 想要的事情。如果有 1000 种产品,您将如何维护您的代码? 'shoe'和号码0有什么关系。
      • @AlexanderLarikov 它仍然回答了这个问题,这意味着它很有用,如果 OP 没有 1000 种产品并且他们只是想要一种快速的方法来制作几个产品怎么办?这会很好。他们没有说他们有一个产品数据库。
      • 你真的不明白为什么你的代码可以使用吗?这是一种不好的做法,因为像新手这样的答案无法编写好的代码。如果您需要添加新的描述作为数组的第一个元素,您将需要重写几乎所有代码
      • 我明白你在说什么,但如果这些不是你的用例,这也不错。如果您的用例仅适用于这 3 个,那很好。 OP 在他的问题中说:What code would I need to edit/add so that the final else statement picks one of the 3 description variables so that I can then echo it on the page?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      相关资源
      最近更新 更多