-1

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

问题:

我在 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在页面上使用它?

4

8 回答 8

8

这是对您给出的逻辑的非常基本的重写。您通常可以将一系列 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)];
}
于 2012-08-02T14:36:20.390 回答
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)];
}
于 2012-08-02T14:35:25.167 回答
1

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

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

- 编辑 -

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

于 2012-08-02T14:36:56.550 回答
0

我会这样做

if(!$product_name){
      $options = array('shoe','car','bottle');
      $product_name = array_rand($options);
}
//your code here.
于 2012-08-02T14:34:36.343 回答
0

试试这个:

<?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>';
?>
于 2012-08-02T14:38:56.540 回答
-1

您可以将所有瓶子描述放入一个数组中,如果您点击最后一个,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>';
}
于 2012-08-02T14:35:33.117 回答
-3

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

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

然后添加您的代码。

于 2012-08-02T14:34:00.650 回答
-4

我会为此使用 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;
}
于 2012-08-02T14:34:43.153 回答