当前位置: 首页 > 知识库问答 >
问题:

尽可能从上到下填充4个均匀分布的数组

洪梓
2023-03-14

这个问题与这篇文章有关,如何在4个数组的多维数组中分发mysql结果集

我得到了公认的答案,但现在我想对代码进行修改,但我没有太多的成功。。。

基本上,从一个mysql结果集,我需要填充4个数组均匀分布尽可能多的从上到下...Chris Hayes提供了一个有效的解决方案,但是当我今天测试它时,我意识到它从左到右填充数组,而不是从上到下...

我如何改变代码,使其填充4个数组尽可能从上到下?

$i = 0;
$array_r = array( array(), array(), array(), array() );

while ($stmt->fetch()) {
    array_push($array_r[$i], array(... values ...));
    $i = ($i + 1) % 4;
}

共有3个答案

夏立果
2023-03-14

我已经测试了一些东西,它似乎有效。。。但它看起来很意大利面。。。请随意优化代码。谢谢

$num_rows = $stmt->num_rows; //number of records returned by the result set
$min_per_column = (int)($num_rows/4); //minimum records per column
$remainder = $num_rows % 4; //the remainder

$array_r = array(array(), array(), array(), array());
$i = 1;
$col = 0;

//how many records to populate before moving to the next array?
$rows = ($col < $remainder) ? $min_per_column + 1 : $min_per_column;

while ($stmt->fetch()) {
    array_push($array_r[$col], array($r_recordingid, $r_title, $r_subtitle, $r_seourl));
    $i++;

    //initialize values for new array
    if ($i > $rows) {
       $i = 1;
       $col++;
       $rows = ($col < $remainder) ? $min_per_column + 1 : $min_per_column;
    }
}
司寇羽
2023-03-14

这个片段应该适用于您:

<?php
$array= [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17];

$strays = count($array)%4;
$offset = 0;
$results = array();

for($x = 0; $x < 4; $x++){
    if ($x < $strays){
        $size = (floor(count($array)/4) + 1);
    } else {
        $size = (floor(count($array)/4));
    }
    $results[] = array_slice($array, $offset, $size);
    $offset+=$size;

}
print_r($results);
宣煜
2023-03-14

最终版本无需操纵输入数组:

for ($num = count($input), $offset = 0; $numBuckets > 0; $numBuckets -= 1, $num -= $bucketSize, $offset += $bucketSize) {
  $bucketSize = ceil($num / $numBuckets);
  $output[] = array_slice($input, $offset, $bucketSize);
}

透视回答:

尝试以下方法:

<?php
$input = range('A', 'Z'); // test input data
$output = array();        // the output container
$numBuckets = 4;          // number of buckets to fill

for (; $numBuckets > 0; $numBuckets -= 1) {
  $output[] = array_splice($input, 0, ceil(count($input) / $numBuckets));
}

print_r($output);

替代版本,无需不断重新检查阵列的长度

for ($num = count($input); $numBuckets > 0; $numBuckets -= 1, $num -= $bucketSize) {
  $bucketSize = ceil($num / $numBuckets);
  $output[] = array_splice($input, 0, $bucketSize);
}
 类似资料:
  • 0.1-0.2:********** 0.2-0.3:******** 0.3-0.4:********* 0.5-0.6:********* 0.6-0.7:********* 0.7-0.8:********* 0.4-0.5:********* 0.5-0.6:********* 0.6-0.7:********* 0.1-0.2:********* 0.2-0.3:********* 0.

  • 问题内容: 我试图识别/创建一个函数(在Java中),该函数给我一个非均匀的分布式数字序列。如果我有一个函数说它将给我一个从到的随机数。 该函数最适合任何给定的函数,下面仅是我想要的示例。 但是,如果我们说函数将返回来自分布式的s nonuni。 我想例如说 约占所有案件的20%。 大约是所有情况的50%。 约占所有案件的20%。 大约是所有情况的10。 总之somting,给我一个数字,如正态分

  • 问题内容: 我知道如果我使用Java的Random生成器,并使用nextInt生成数字,则数字将均匀分布。但是,如果我使用2个Random实例,并使用两个Random类生成数字,会发生什么。数字是否会均匀分布? 问题答案: 每个实例生成的数字将均匀分布,因此,如果将两个实例生成的随机数序列组合在一起,则它们也应均匀分布。 请注意,即使结果分布是均匀的,您也可能要注意种子,以避免两个生成器的输出之间

  • 我们在AWS上运行16个节点kafka集群,每个节点是m4. xLargeEC2实例,具有2TB EBS(ST1)磁盘。Kafka版本0.10.1.0,目前我们有大约100个主题。一些繁忙的话题每天会有大约20亿个事件,一些低量的话题每天只有数千个。 我们的大多数主题在生成消息时使用UUID作为分区键,因此分区分布相当均匀。 我们有相当多的消费者使用消费群体从这个集群消费。每个使用者都有一个唯一的

  • 我想有一个主题与10个分区。我使用的是Kafka的默认配置。我用帮助器脚本创建了一个有10个解析的主题,现在我将为它生成消息。 问题是,消费者似乎只有5个分区可以从中获取数据。 让我们更详细地描述一下。 我知道每个分区需要一个使用者线程。我希望能够提交每个分区的偏移量,这是可能的,只有当我有一个线程每个消费连接器每个分区(我是使用高级消费)。 当我这样做10次时,我有10个消费者,每个分区每个线程

  • 本文向大家介绍python随机数分布random均匀分布实例,包括了python随机数分布random均匀分布实例的使用技巧和注意事项,需要的朋友参考一下 因为概率问题,所以需要测试一下python的随机数分布。到底是平均(均匀)分布,还是正态(高斯)分布。 测试代码如下: 测试结果: 结果说明: 平均(均匀)分布。 以上这篇python随机数分布random均匀分布实例就是小编分享给大家的全部内