【问题标题】:array_rand will not work inside a conditional statementarray_rand 在条件语句中不起作用
【发布时间】:2013-10-12 07:20:25
【问题描述】:

我在 foreach 循环中工作,并试图将我的 array_rand 放入 if 语句中。它在 if 语句中不起作用,但如果我将它从 if 语句中取出(按原样),它就会起作用。顺便说一下,在 foreach 循环的内部和外部都是如此。无论我将它放在循环之前还是之后,它都不会在 if 语句中工作。但如果我将它从 if 语句中取出,它将在循环之前或之后工作。

foreach($files as $file) {
$randcolor = array("red","green","blue","yellow","brown","black","orange","white","silver","purple","pink");
    if(isset($color)) {
        $color = $color;
    }
    else {
        $color = $randcolor[array_rand($randcolor)];
    }

    ... bunch of other stuff

}

我尝试在它们自己的if($color === 'red'){etc.} 语句中拼出每种颜色。我试过if(!$color){$color = $randcolor[array_rand($randcolor)];} 没有任何效果。它在 if 语句中不起作用。如果我把它拿出来,它会起作用,但是我不能再用 $color 属性定义特定的颜色了。奇怪的是,即使我在 无条件 array_rand 语句之后定义了特定颜色,它仍然会接管并覆盖任何其他颜色规范。

编辑 忘记提及“将不起作用”我的意思是,它根本不输出任何字符串。只是空白。

更新

为了清楚起见:$color 是简码中的一个属性,因此它由简码本身定义。

更新 2

我在一个长短代码的末尾输出这个,return $thefiles 其中$thefiles = 一个长 html 字符串,其中包括 div 类中的 $color。

** 更新 3 ** 更多代码:

foreach($files as $file) {
        $randcolor = array("red","green","blue","yellow","brown","black","orange","white","silver","purple","pink");
        if(!($color)){$color = $randcolor[array_rand($randcolor)];}


        $thefiles .= '<a id="sssf" style="width:'.$width.$perpx.'" class="'.$style.$corners.'" href="'.$link.'" download><div class="sssf-filetype sssf-'.$color.'"><div class="sssf-label">'.$ftype.'</div></div>'.$cleanName.' <span style="float:right;">'.$fsize.'</span></a>';

    unset($color);
        }

    }

return $thefiles;

}

【问题讨论】:

  • 我无法重现您所说的问题。你能用失败的特定测试用例更新问题吗?
  • 严肃的问题:您还需要什么? (不是讽刺。)这是实际代码。
  • $color 变量定义为什么?
  • 对不起,这是短代码中的一个属性。
  • 除非您在某处取消设置,否则 $color 将在除第一次之外的每个迭代中定义,因此它不会进入 else 子句:您需要在每个迭代的末尾 unset($color)循环的迭代

标签: php arrays random conditional-statements


【解决方案1】:

尝试类似:

$randcolor = array("red","green","blue","yellow","brown","black","orange","white","silver","purple","pink");
$useColor = $color;
if(!($color)){
    $useColor = $randcolor[array_rand($randcolor)];
}

$thefiles .= '<a id="sssf" style="width:'.$width.$perpx.'" class="'.$style.$corners.'" href="'.$link.'" download><div class="sssf-filetype sssf-'.$useColor.'"><div class="sssf-label">'.$ftype.'</div></div>'.$cleanName.' <span style="float:right;">'.$fsize.'</span></a>';

但是在 foreach() 循环外部定义 $randcolor:因为它不会改变,你不需要为每个文件重新定义它

【讨论】:

  • 谢谢,马克。现在试试。
  • 谢谢你,马克!你搞定了。我曾尝试过类似的事情,但我是倒着做的。我试过$color = $dummycolor。这成功了。感谢您的耐心帮助。
  • 为了后代,马克的答案没有取消设置$color。
【解决方案2】:

isset 用于检查变量是否为NULL。在您的情况下,$color 的值是 NULL,因此您的 if 条件没有被执行。如果您输入$color = '' 或定义您的属性$color,您的代码应该可以工作。

我已经尝试过,它对我有用:http://phpfiddle.org/main/code/kwx-511

【讨论】:

  • 经过几次其他尝试后,我才开始使用 isset。我会看看。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-12-29
  • 2020-01-14
  • 2022-07-23
  • 1970-01-01
  • 2011-01-08
  • 2011-12-04
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多