Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中从循环中获取“随机”项集_Php - Fatal编程技术网

如何在php中从循环中获取“随机”项集

如何在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;

我在一些XML节点之间循环,假设我有1到200个这样的节点

如何随机选择最多10个节点。它必须是最多十个,但只有一个

这就是我现在的工作

        $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之间的随机节点集