【问题标题】:If variable equals variable change a variable如果变量等于变量,则更改变量
【发布时间】:2013-04-26 08:19:33
【问题描述】:

我想知道如何使用 rand() 使 3 个变量永远不会有相同的数字?

<?php
$myAd[1] = '<a href="http://www.pegor.com">Free PHP Tutorials</a>';
$myAd[2] = '<a href="http://www.lifestinks.info">Fast Facebook Proxy</a>';
$myAd[3] = '<a href="http://www.mozilla.org">Fastest and Secure Web Browser</a>';

$adId = rand(1,count($myAd));
$adId2 = rand(1,count($myAd));
$adId3 = rand(1,count($myAd));
if ($adId === $adId2) { $adId = ($adId2 - 1) }
if ($adId === $adId3) { $adId = ($adId3 - 1) }
if ($adId2 === $adId3) { $adId2 = ($adId3 - 1) }

echo $myAd[$adId];
echo '<br>';
echo $myAd[$adId2];
echo '<br>';
echo $myAd[$adId3];
?>

简而言之,我想要完成的是我的网站在左栏中显示 3 种产品。每次用户刷新时,它们都会改变。我一直遇到的问题是随机数生成的两个变量是相同的。我怎样才能让它总是出现在不同的数字上,以便一次显示 3 种不同的产品,而不是 2 种相同的产品和 1 种不同的产品?注意:我将向数组中添加更多项目,这只是一个测试脚本,直到我弄清楚为止。

【问题讨论】:

  • 查看linklist() 构造。或shuffle().
  • 嗯,我真的不明白。如果我删除所有 if 语句,我的代码就可以工作。唯一的问题是有时显示的项目中有 2 个是相同的。有没有可能说这个变量是否等于这个变量减去或加上这个?
  • 您的代码的主要问题是,有时(实际上,有 3 分之二的机会)您会从 1 中减去 1,这意味着 0,并且 $myAd[0 中没有任何内容]。所以会报错。
  • 我在 0 处添加了一个,因为我发现了我的错误,但我确实接受了 CORRUPTs 答案,因为它可以满足我的需要。特别是因为他们使用了 foreach 函数。我计划将每个产品放在一个单独的 div 中,但是使用 foreach 我可以轻松地让它为我为每个产品创建 div。不过还是感谢您的帮助:)
  • 确实,第二个问题是“如果变量等于变量更改变量”是选择三个不同值的低效方法。您现在选择了一个可以优雅地解决您的问题但实际上并没有回答您的标题问题的解决方案。此外,您无需在标题中添加“已解决”。

标签: php arrays echo


【解决方案1】:

试试shuffle()array_slice()

$myAd = array();
$myAd[1] = '<a href="http://www.pegor.com">Free PHP Tutorials</a>';
$myAd[2] = '<a href="http://www.lifestinks.info">Fast Facebook Proxy</a>';
$myAd[3] = '<a href="http://www.mozilla.org">Fastest and Secure Web Browser</a>';
// more of...

shuffle($myAd);

$myAd = array_slice($myAd, 0, 3);

foreach($myAd as $value){
    echo $value, '<br/>', PHP_EOL;
}
?>

【讨论】:

  • 但是如果数组中有 50 个项目,它不会回显所有 50 个项目吗?
  • @VampireNews 然后,array_slice() 帮助。
  • 现在就像一个魅力。谢谢。
【解决方案2】:
$adId = rand(1, count($myAd));
do
    { $adId2 = rand(1, count($myAd)); }
while ($adId2 == $adId);

do
    { $adId3 = rand(1, count($myAd)); }
while ($adId3 == $adId || $adId3 == $adId);

但最好使用shuffle()array_slice()

【讨论】:

    【解决方案3】:

    示例如何比较两个,但基本上你可以改进你最需要的

    $rnd1 = rand(0,9);
    do {
      $rnd2 = rand(0,9);
    } while ($rnd1 == $rnd2);
    

    首先,您需要将随机变量放入一个变量中,然后在随机 1 等于随机 2 的情况下,您可以根据需要做更复杂的事情。

    GB

    【讨论】:

    • 当然,当用数字代替广告范围时,需要进行健全性检查以确保确实有足够的广告,否则会出现无限循环。
    • 感谢@PaulGregory 的解释,虽然这是一个简单的解释 :)
    猜你喜欢
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 2022-12-05
    • 2014-11-28
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多