【问题标题】:Weird behavior with foreach() with PHP\array_rand(x, y)带有 PHP\array_rand(x, y) 的 foreach() 的奇怪行为
【发布时间】:2020-06-18 09:17:18
【问题描述】:

我正在尝试通过从 n 个项目的向量中选择 k 个项目来将属性随机分配给一个实体。在运行下面的 sn-p 时,有时它可以工作,有时它会用 foreach 给出这个奇怪的错误

InvalidForeachArgumentException: Invalid argument supplied for foreach()

我确实读过一些关于当变量通过引用传递时 foreach 的奇怪行为的帖子,并且可能需要取消设置它,但这似乎与此无关,因为我在这里没有使用任何引用。有趣的是,如果我不使用随机数生成器生成 $factor 而是将其设置为常量整数值,那么代码就可以工作。我不太确定,这里发生了什么。

$factor = PseudoRandom\int(
          1,
          $num
        );

        $capabilities = vec[];
        $random_keys = PHP\array_rand(
          $temp,
          $factor, 
        );

        foreach ($random_keys as $key) {
          $capabilities = Vec\append(
            $capabilities,
            $temp[$key],
          );
        }

【问题讨论】:

    标签: php random foreach hacklang


    【解决方案1】:

    当只选择一个条目时,array_rand() 返回随机条目的键。否则,将返回随机条目的键数组。
    https://www.php.net/array_rand

    所以,当$factor 恰好是1 时,只会返回一个键,您无法使用foreach 对其进行迭代。

    【讨论】:

    • .. 并且根据$num 的值,如果它大于$temp 中的元素数量,也可能返回NULL。 尝试选择比数组中更多的元素将导致 E_WARNING 级别错误,并且将返回 NULL。
    猜你喜欢
    • 2014-01-15
    • 2023-03-14
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多