如何在php中从循环中获取“随机”项集
我在一些XML节点之间循环,假设我有1到200个这样的节点 如何随机选择最多10个节点。它必须是最多十个,但只有一个 这就是我现在的工作如何在php中从循环中获取“随机”项集,php,Php,我在一些XML节点之间循环,假设我有1到200个这样的节点 如何随机选择最多10个节点。它必须是最多十个,但只有一个 这就是我现在的工作 $i = 0; foreach ($butters->users->user as $user) { if($i==10) break; $id = $user->id; $name = $user->screen_name;
$i = 0;
foreach ($butters->users->user as $user) {
if($i==10) break;
$id = $user->id;
$name = $user->screen_name;
$profimg = $user->profile_image_url;
echo "things";
$i++;
}
困难在于我不知道我将拥有多少,但我希望我从中选择随机10的池是从所有存在的池中选择的。创建一个随机对象不知道PHP特定代码,然后调用它并与集合中的10/total进行比较。这意味着您在理论上应该选择10%,但它可能会更少,并且您的现有代码会阻止它选择更多。创建一个随机对象。如果您不知道PHP特定的代码,请调用它并与集合中的10/total进行比较。这意味着您在理论上应该选择10%,但它可能会更少,并且您的现有代码会阻止它选择更多。我将获得10个随机索引,然后循环这些索引并获得节点 $indexes = array(); for($i = 0; $i< 10; $i++){ $indexes[] = rand(0, $butters->users->length); } foreach($indexes as $index){ $user = $butters->users->item($index); //do whatever with $user } 将索引添加到$indexes数组时,需要添加一个检查以确保尚未获得该索引 您可以将其放在一个命令中,但是根据元素的数量,最终可能会出现重复的情况,但这是可能的 for($i = 0; $i< 10; $i++){ $user = $butters->users->item(rand(0, $butters->users->length)); //do something with $user }
我会得到10个随机索引,然后循环这些索引,得到节点 $indexes = array(); for($i = 0; $i< 10; $i++){ $indexes[] = rand(0, $butters->users->length); } foreach($indexes as $index){ $user = $butters->users->item($index); //do whatever with $user } 将索引添加到$indexes数组时,需要添加一个检查以确保尚未获得该索引 您可以将其放在一个命令中,但是根据元素的数量,最终可能会出现重复的情况,但这是可能的 for($i = 0; $i< 10; $i++){ $user = $butters->users->item(rand(0, $butters->users->length)); //do something with $user }
假设您使用的是SimpleXML,那么您可以使用。这将返回一个数组,并从该数组中返回蛋糕 这样做应该可以:
$users = $xml->xpath('//butters/users/user');
$random = array_rand($users, 10);
不过,可能有人想纠正我的Xpath错误。从内存执行此操作假设您使用的是SimpleXML,则可以使用获取所有用户。这将返回一个数组,并从该数组中返回蛋糕 这样做应该可以:
$users = $xml->xpath('//butters/users/user');
$random = array_rand($users, 10);
不过,可能有人想纠正我的Xpath错误。从内存执行此操作如果对$users有某种奇怪的自实现数据结构,则可能需要使用reservator采样-如果对$users有某种奇怪的自实现数据结构,则可能需要使用reservator采样-将所有用户放在一个数组中,洗牌并抓取前十项:
$users = array[];
foreach ($butters->users->user as $user) {
$users[] = &$user;
}
shuffle($users);
$tenRandomUsers = array_slice($users, 0, 10);
也许你可以用$users=array$butters->users->user来缩短第一步。将所有用户放在一个数组中,洗牌并抓取前十项:
$users = array[];
foreach ($butters->users->user as $user) {
$users[] = &$user;
}
shuffle($users);
$tenRandomUsers = array_slice($users, 0, 10);
也许你可以用$users=array$butters->users->user来缩短第一步。我认为这不起作用,这取决于他使用的XML模块,因为array\u rand需要数组作为第一项,但是如果你使用DOM模块,$butters->user->user可能是DOMNODE::ELEMENT\u列表。可能是错误的,因为对foreach起作用的东西也会对array_rand起作用,假设Patrick给出的示例没有输出错误。听起来好像Patrick想要10作为随机元素的上限,所以你应该为array_rand的第二个参数传递一个介于1和10之间的随机数,然后你会得到一个长度介于1和10之间的随机节点集。我认为这行不通,根据他使用的XML模块的不同,因为array\u rand需要array作为第一项,但是如果使用DOM模块,$butters->users->user可能是一个DOMNODE::ELEMENT\u列表。可能是错误的,因为对foreach起作用的东西也会对array_rand起作用,假设Patrick给出的示例没有输出错误。听起来Patrick想要10作为随机元素的上限,所以你应该为array_rand的第二个参数传递一个介于1和10之间的随机数,然后你会得到一个长度介于1和10之间的随机节点集