【问题标题】:Ways of getting 20% of elements in array - PHP获取数组中 20% 元素的方法 - PHP
【发布时间】:2018-12-10 12:21:15
【问题描述】:

我有一个包含 n 个元素的数组,我需要将这些元素中的 20% 随机放入另一个数组中。有什么功能可以实现吗?

目前我能想到的是这样的:

foreach ($orders as $order) {
    if (rand(1, 100) > 80) {
        echo('20%');
    } else {
        echo('80%');
    }
}

有没有更优化的方法?

【问题讨论】:

  • @The50 这不会得到 20% 的数组元素,有时它可能会得到更多或更少。您只是随机获得一个数字,而不是获得 20% 的随机元素。
  • 没有内置功能,但可以使用count() floor()range() 和循环轻松完成
  • 你必须得到正好一半吗?请注意,在您的示例中,您通过统计获得 20% 而不是 n/5

标签: php arrays random


【解决方案1】:

您可以shuffle 数组,然后获取前 20% 的元素。

$array = [1, 2, 3, 4];
shuffle($array);    

$twenty = array_slice($array, 0, floor(count($array) / 5));
$eighty = array_slice($array, floor(count($array) / 5));

【讨论】:

  • 是的,这可以解决问题,但是我怎样才能保存剩下的 80% 的元素呢?我也需要它们,作为另一个数组。
  • 你可以再次使用array_slice到数组的另一部分。
  • 如果你使用array_splice(),那么你就不必切片两次了。
【解决方案2】:

最简单的解决方案可能是使用shuffle

shuffle($orders);
for ($i = 0; $i < count($orders) / 5; $i++) {
    // do something with the first 20% of elements
}
for (; $i < count($orders); $i++) {
    // do something with the rest of the array
}

【讨论】:

    【解决方案3】:

    要通过一个函数调用获得两个数组,请使用 array_splice 函数。之后

    shuffle($array);
    $twenty = array_splice($array, floor(count($array) / 5 * 4));
    

    $twenty 将持有 1/5 的源数组和 $array - 其他项

    【讨论】:

      【解决方案4】:

      Shuffle 是这种情况下最简单的解决方案

      $array = [1,2,3,4]
      shuffle($array);
      $firstSlice = array_slice($array , 0 , count($array)/2);
      $secondSlice = array_slice($array , count($array)/2 , count($array));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 2011-04-15
        相关资源
        最近更新 更多