PHP-运行If语句,如果没有一个为真,则返回一个随机变量


PHP - Run through If statements, if none are true, echo a random variable

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

问题:

我在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它了?

这是对您给出的逻辑的非常基本的重写。您通常可以将一系列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)];
}
$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)];
}

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

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

--编辑--

Robert K/Alexander Larikov击败了我:)请参阅他们的示例代码。

我会像这个一样做

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

试试这个:

<?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>';
?>

您只需将所有瓶子描述放入一个数组中,如果您达到最后的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>';
}

我认为您可以执行以下操作:

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

然后添加您的代码。

我会使用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;
}