【问题标题】:How to get random array key having value in bounds如何获得具有边界值的随机数组键
【发布时间】:2017-10-16 21:02:42
【问题描述】:

我有这个数组:

$tz = array(
    'Usa' => '-7',
    'Ecuador' => '-5',
    'Bolivia' => '-4',
    'Uruguay' => '-3',
    'London' => '0',
    'France' => '2',
    'Spain' => '2',
    'Germany' => '2',
    'Greece' => '3',
    'Rusia' => '3',
    'Romania' => '3',
    'Pakistan' => '5',
    'China' => '8' 
);

我的目标是从偏移量 >= 0 和

我试过了:

$country = array_rand($tz);
echo 'Key: "'.$country.'" offset: "'.$tz[$country].'"<br>';

返回 键:“罗马尼亚”偏移量:“+3:00”,但我知道..不是正确的方法。

如何做到这一点?有什么帮助吗?

正如 MrRP 所说,这个问题解决了

$filtered = array_filter($tz, function($v) { return $v >= 0 && $v <=3; });
$country = array_rand($filtered);
echo 'Key: "'.$country.'" offset: "'.$filtered[$country].'"<br>';

【问题讨论】:

    标签: php arrays random range filtering


    【解决方案1】:
    $filtered = array_filter($tz, function($v) { return $v >= 0 && $v <=3; });
    

    那么你可以在过滤后的数组上使用array_rand

    【讨论】:

      【解决方案2】:

      看看这个。无法准确理解您的查询,但我认为这可能是您想要的。

      $tz = array(
          'Usa' => '-7',
          'Ecuador' => '-5',
          'Bolivia' => '-4',
          'Uruguay' => '-3',
          'London' => '0',
          'France' => '2',
          'Spain' => '2',
          'Germany' => '2',
          'Greece' => '3',
          'Rusia' => '3',
          'Romania' => '3',
          'Pakistan' => '5',
          'China' => '8'
      );
      
      $lowerBound = 0;
      $upperBound = 3;
      
      $newDataSet = array();
      foreach ($tz as $key => $value) {
          if($value<=$upperBound && $value>=$lowerBound) {
              $newDataSet[] = $key;
          }
      }
      
      echo '<pre>';
      print_r($newDataSet);
      echo '</pre>';
      
      // Fetch random Country from the new list
      $rand_keys = array_rand($newDataSet, 1);
      
      echo '<br>Here is a random country : '.$newDataSet[$rand_keys] . "\n";
      

      【讨论】:

      • 感谢您尝试 mi6crazyheart... MrRP 有更好的方法来解决这个问题..
      【解决方案3】:

      试试这个代码....

      $tz = array(
         'Usa' => '-7',
         'Ecuador' => '-5',
         'Bolivia' => '-4',
         'Uruguay' => '-3',
         'London' => '0',
         'France' => '2',
         'Spain' => '2',
         'Germany' => '2',
         'Greece' => '3',
         'Rusia' => '3',
         'Romania' => '3',
         'Pakistan' => '5',
         'China' => '8' 
      

      );

      做{

         $t = array_rand($tz);
      

      }

      while(!($tz[$t]>=0)&&($tz[$t]

      echo '';print_r($t);die;

      【讨论】:

        【解决方案4】:

        单行太容易了:

        $country=array_rand(array_intersect($tz,range(0,3)));
        

        你的回声线:

        echo 'Key: "',$country,'" offset: "',$tz[$country],'"<br>'; 
        

        解释:

        创建您想要的值范围:range(0,3); // creates [0,1,2,3]

        创建符合条件的国家/地区数组:array_intersect($tz,range(0,3));

        array('London'=>'0',
              'France'=>'2',
              'Spain'=>'2',
              'Germany'=>'2',
              'Greece'=>'3',
              'Rusia'=>'3',
              'Romania'=>'3'
        )
        

        然后从列表中随机抽取一个键,完成!

        这种方法效率高,不会产生不必要的全局变量。

        array_intersect() 生成与 MrRP 答案中的array_filter() 相同的过滤数组。不同之处在于我的方法将只在每次迭代中执行一个条件操作(如 in_array()),而不是在每次迭代中执行两个单独的条件:大于或等于 & 小于或等于.

        【讨论】:

        • 你们太棒了!!非常感谢大家..!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 2014-04-26
        • 1970-01-01
        • 1970-01-01
        • 2022-11-21
        • 2019-03-15
        相关资源
        最近更新 更多