【问题标题】:How to get random element from multidimensional array in php如何从php中的多维数组中获取随机元素
【发布时间】:2015-08-07 17:43:07
【问题描述】:

我有一个最初由 post 变量组成的多维数组,看起来像这样:

$easys = array(
array($easy1min,$easy1max,$easy1enc),
array($easy2min,$easy2max,$easy2enc),
array($easy3min,$easy3max,$easy3enc),
array($easy4min,$easy4max,$easy4enc),
array($easy5min,$easy5max,$easy5enc),
array($easy6min,$easy6max,$easy6enc),
array($easy7min,$easy7max,$easy7enc),
array($easy8min,$easy8max,$easy8enc),
array($easy9min,$easy9max,$easy9enc),
array($easy10min,$easy10max,$easy10enc)
);

我正在尝试从中返回一个随机结果。

我尝试随机播放的函数如下所示:

$shuffle($easy_encounters);
$num = rand($easy_encounters[0][0],$easy_encounters[0][1]);
return "(".$num.") ".$easy_encounters[0][2];

给了

"shuffle 期望参数 1 是数组.."

我也试过 iterator_to_array:

$easy_encounters = iterator_to_array($easy_encounters);

返回错误

“可捕获的致命错误:传递给 iterator_to_array() 的参数 1 必须实现接口 Traversable...”

然后尝试对 array_rand 使用各种语法,例如:

$easy_encounters = array_rand($easy_encounters);
$num = rand($easy_encounters [0][0],$easy_encounters [0][1]);
return "(".$num.") ".$easy_encounters [0][2];

$random_obj = $easy_encounters[array_rand($easy_encounters)];
$num = rand($random_obj[0][0],$random_obj[0][1]);
return "(".$num.") ".$random_obj[0][2];

我觉得我在这一切都在打。我承认在遇到 Traversable 错误后,我可能还没有完全理解 iterator_to_array 的用法。

感谢任何帮助。我已经在 SO 附近跋涉,这是我迄今为止使用的示例的地方。

【问题讨论】:

  • 您将数组命名为 $easy,但您在任何地方都将其用作 $easy_encounters
  • @Orangepill 抱歉,我忘了表明我将数组分配给了一个会话,然后再次返回会话...code $_SESSION["enc_easy"] = $easys; $easy_encounters = $_SESSION["enc_easy"];
  • @JayBlanchard 这是一个关于随机化多维数组的具体问题。我不明白你怎么相信这是一个关于解析/语法错误的非常普遍的问题的重复。
  • 错误信息中非常清楚地说明了这个问题......你没有得到正确的函数数组......

标签: php arrays random multidimensional-array shuffle


【解决方案1】:
$randomArray = array_rand($easy_encounters); 
echo $easy_encounters[$randomArray][array_rand($easy_encounters[$randomArray])];

首先得到一个随机数组。然后从数组中获取一个随机值。

$randomArray$easy_encounters 内部的一个随机数组。所以底线是echo $easy_encounters[$randomArray][$randomElement inside $randomArray]

【讨论】:

  • 给出警告:array_rand() 期望参数 1 为数组,给定为空
  • 它对我有用。请务必更改变量名称。
  • 为了确保我理解,我把我的数组(在这种情况下,它现在称为 $easy_encounters 并随机化到 $randomArray,然后放回 $easy_encounters 中?这对我来说就像你的代码在做。
  • 这就是正在发生的事情。假设它随机选择$easy_encounters 内第一个数组中的第一个元素。 $randomArray$easy_encounters 中的第一个数组,在本例中为$easy_encounters[0]。所以底线是echo $easy_encounters[0][0]。第二个零来自array_rand($easy_encounters[$randomArray]),假设它随机选择该数组中的第一个元素。我知道我没有很好地解释这一点,所以如果您有任何问题,请告诉我。
  • 我决定做一个解决方法,但接受你的回答是最好的。至少它实际上是建设性的。
【解决方案2】:

首先我不认为你可以使用$shuffle(argument),它是一个函数而不是一个变量,删除$,其次你在代码的第一部分使用$easys,然后$easy_encounters对其进行洗牌。在它们中使用相同的变量名。

【讨论】:

  • 这些是我在解决问题时使用的各种代码迭代之间来回输入的拼写错误
猜你喜欢
  • 2021-04-29
  • 1970-01-01
  • 2021-12-22
  • 2021-07-03
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多