代码之家  ›  专栏  ›  技术社区  ›  mrpatg

如何从PHP中的循环中获取“随机”项集

php
  •  1
  • mrpatg  · 技术社区  · 15 年前

    我遍历了一些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的池是从存在的所有池中选择的。

    6 回复  |  直到 15 年前
        1
  •  5
  •   lamas    15 年前
    $randomPool = array_rand ( $butters->users->user, 10 );
    
        2
  •  3
  •   Psytronic    15 年前

    我会得到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
    }
    
        3
  •  2
  •   Gumbo    15 年前

    将所有用户放入一个数组中,对其进行无序排列,并获取前十项:

    $users = array[];
    foreach ($butters->users->user as $user) {
        $users[] = &$user;
    }
    shuffle($users);
    $tenRandomUsers = array_slice($users, 0, 10);
    

    也许你可以缩短第一步 $users = (array) $butters->users->user .

        4
  •  0
  •   cjk    15 年前

    创建一个随机对象(不知道特定于PHP的代码),然后调用它并与集合中的10/(total)进行比较。这意味着您在理论上应该选择10%,但是它可能会更少,并且您的退出代码会阻止它选择更多。

        5
  •  0
  •   Gordon Haim Evgi    15 年前

    假设您使用的是simpleXML,则可以使用 XPath 获取所有用户。这将返回一个数组,从中应该是cake。

    这样的事情应该可以做到:

    $users  = $xml->xpath('//butters/users/user');
    $random = array_rand($users, 10);
    

    不过,可能有人想在xpath上更正我的错误。从记忆中做

        6
  •  0
  •   Community CDub    8 年前

    如果您对$users有某种奇怪的自实现数据结构,那么您可能希望使用reservor抽样。-- Efficiently selecting a set of random elements from a linked list

    推荐文章