0

0

一个分拆数组的算法

php中文网

php中文网

发布时间:2016-06-06 20:40:34

|

1124人浏览过

|

来源于php中文网

原创

现有如下需求:首先有个数组$arr = array(1 => 12, 2 => 23);现在要将该数组进行拆分,生成一个新的数组,新数组的个数如下:

$newArr = array(
    array(2, 7),
    array(2, 7),
    array(2, 9),
    array(1, 3),
    array(1, 9),
)

必须满足一下条件:
1:新数组必须是有5项;
2:必须按照原有数组中最大的值来进行先拆分,然后次大值。。。,至于每项要拆分成多少个,自行决定,
3:拆分后的数组二维中的第一个值为原有的key,值为拆分后的数值,二维中第一个值相同的加起来必须等于原来数组的key对应的值。

回复内容:

现有如下需求:首先有个数组$arr = array(1 => 12, 2 => 23);现在要将该数组进行拆分,生成一个新的数组,新数组的个数如下:

$newArr = array(
    array(2, 7),
    array(2, 7),
    array(2, 9),
    array(1, 3),
    array(1, 9),
)

必须满足一下条件:
1:新数组必须是有5项;
2:必须按照原有数组中最大的值来进行先拆分,然后次大值。。。,至于每项要拆分成多少个,自行决定,
3:拆分后的数组二维中的第一个值为原有的key,值为拆分后的数值,二维中第一个值相同的加起来必须等于原来数组的key对应的值。

余兴节目。我就直接粘答案了。技巧:

WaStar 网上花店系统
WaStar 网上花店系统

系统特点: 商品多级分类检索、搜索,支持同一商品多重分类,自由设置显示式样 自由设置会员类型,自由设置权限项目,自由分配每种会员类型和每个会员的权限 灵活的商品定价,最多12级价格自由分配给各种会员类型或会员,也可针对单会员单商品特殊定价 强大的会员管理、帐户管理、订单管理功能和一系列帐务查询统计功能 灵活的会员积分系统,自由设置每个积分事件的积分计算方法 灵活的网站内容发布、管理系统,每个栏目可

下载
  1. 想象成一个线段,在上边随机选若干个点将其切断。统计每一段的长度相加起来就必然是正确的和值。
  2. 题目不禁止结果中出现0,所以选点的时候允许重复。
  3. 和值为负的时候,翻转成正的处理。
 12, 2 => 23];
$input = [1 => 0, 2 => 0];
define("TOTAL_SEGMENTS", 5);

$input_sorted = $input; 
asort($input_sorted);

$segment_counts = [];
$segment_counts[0] = mt_rand(1, TOTAL_SEGMENTS - 1);
$segment_counts[1] = TOTAL_SEGMENTS - $segment_counts[0];

$result = [];
for ($i_slice = 0; $i_slice < 2; $i_slice++) {
    $input_record  = array_slice($input_sorted, -($i_slice + 1), 1, true);
    $record_key    = array_keys($input_record)[0];
    $target_sum    = array_values($input_record)[0];
    $segment_count = $segment_counts[$i_slice];

    if ($target_sum < 0) {
        $negative_sum = true;
        $target_sum = -$target_sum; 
    } else { 
        $negative_sum = false;
    }

    $positions = [0, $target_sum];
    while (count($positions) < ($segment_count + 1)) {
        $t = mt_rand(0, $target_sum);
        array_push($positions, $t); //不禁止出现0的时候无需判重(如果禁止出现0这个题就麻烦了)
    }
    sort($positions);

    for ($i = 0; $i < $segment_count; $i++) {
        $value = $positions[$i + 1] - $positions[$i];
        if ($negative_sum) { $value = -$value; }
        array_push($result, [$record_key, $value]);
    }
}

foreach ($result as $line) { printf("array(%d, %d), \n", $line[0], $line[1]); }

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 7.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号