php 把一个数组分成有n个元素的二维数组的算法

<?php
   //把一个数组分成几个数组
   //$arr 是数组
   //$num 是数组的个数
   function partition($arr,$num){
     //数组的个数
     $listcount=count($arr);
     //分成$num 个数组每个数组是多少个元素
     $parem=floor($listcount/$num);
     //分成$num 个数组还余多少个元素
     $paremm=$listcount%$num;
     $start=0;
     for($i=0;$i<$num;$i++){
        $end=$i<$paremm?$parem+1:$parem;
        $newarray[$i]=array_slice($arr,$start,$end);
        $start=$start+$end;
     }
     return $newarray;
   }

 $arr=array(1,3,4,5,6,7,8,9,2);
 print_r(partition($arr,3));

时间: 2024-10-12 11:52:39

php 把一个数组分成有n个元素的二维数组的算法的相关文章

jQuery$.each循环遍历详解,各种取值对比,$.each遍历数组、对象、Dom元素、二维数组、双层循坏、类json数据等等

jQuery 遍历函数包括了用于筛选.查找和串联元素的方法. 函数 描述 .add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集合中. .children() 获得匹配元素集合中每个元素的所有子元素. .closest() 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的祖先元素. .contents() 获得匹配元素集合中每个元素的子元素,包括文本和注释节点. .each() 对 jQuery 对象进行迭代,为每个匹配元素执行函数. .end(

返回一个整数数组中最大子数组的和。(续2)---二维数组

求二维数组的最大子数组的和 思路:通过降维进行运算,每一行每次进行相同程度的加法运算,然后存到一个数组中就成了一维数组的求最大子数组的和,例如上图先进行[A][3]~[A][5]的求最大子数组的和,然后进行A列和B列相加再求最大子数组的和,如此循环到A+B+......+F,然后再从 B列开始进项如上操作,每一次求出最大子数组的和之后都会和最大值进行比较,然后选出最大值,输出结果.时间复杂度为O(n^4).....想不出来降低时间复杂度的方法... 代码如下 import java.util.S

php 二维数组 根据条件合并成新的二维数组

$_data = []; $order_id = ''; foreach ($data as $k => $v) { if($order_id != $v['order_id']){ $arr = []; $arr['id'] = $v['id']; $arr['order_number'] = $v['order_number']; $arr['edit_time'] = $v['edit_time']; $arr['order_state'] = $v['order_state']; $ar

二维数组作为函数参数传递剖析

前言 很多文章不外乎告诉你下面这几种标准的形式,你如果按照它们来用,准没错: //对于一个2行13列int元素的二维数组 //函数f的形参形式 f(int daytab[2][13]) {...} //以下两种可以忽略行数 f(int daytab[][13]) {...} f(int (*daytab)[13]) {...} 甚至会有人告诉你多维数组作为参数传递可以省略第一维,其他维不能省略.然而你对这种形式并不满意:如果事先限定了二维数组的大小,函数的泛用性就要大打折扣了.因为你真正需要的,

C++二维数组做函数参数

二维数组做函数参数的形式主要有: /对于一个m行n列int元素的二维数组 //函数f的形参形式 f(int daytab[m][n]) {...} //以下两种可以忽略行数 f(int daytab[][n]) {...} f(int (*daytab)[n]) {...} 这里都不能忽略第二维的大小.主要 原因是二维数组在栈内分配的内存是连续的,它的每一行都有相同的元素,这样,array[i][j] 和 *(*(array +i) +j)是一样的,程序是知道array+i的i实际上偏移了i*N

返回一个二维数组中最大联通子数组的和

1 #include <iostream> 2 #include <time.h> 3 #include<string> 4 #include<fstream> 5 #define M 3 6 #define N 4 7 using namespace std; 8 9 int main() 10 { 11 int length[100],num[M][N] = {0},visit[M][N]={0},i=0;//length[100],是把文件中的数组转化

如何用一层for循环打印出一个二维数组

常规通过两层for循环可以比较轻松打印二维数组. 代码如下: #include <stdio.h> #define ROWS 3 #define COLS 3 int main() { int a[ROWS][COLS]={1,2,3,4,5,6,7,8,9}; for(int i=0;i<ROWS;i++) { for(int j=0;j<COLS;j++) printf("%d ",a[i][j]); printf("\n"); } re

二维数组和它的指针

这片文章介绍二维数组int a[ i ] [ j ]中的符号:a,&a[ i ],&a[ i ][ j ],a[ i ][ j ],&a[ i ] [ j ]的含义,重点在后面第二部分的分析,但是前面第一部分的复习数组指针,指针数组和二维指针是前提,前面的不会,后面的没法理解.这片文章写的有些费劲,个人能力不够,可能会有错误,希望各位朋友能够指正,共同进步.//握手 一:先回顾一下数组指针,指针数组,二维指针 先根据逐层分析分方法分析下面的代码 (1)int (*p)[5]; (2

java基础:java中的二维数组

二维数组的概念: 一个元素为一维数组的数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的元素有多少个. 注意: A:以下格式也可以表示二维数组 a:数据类型 数组名[][] = new 数据类型[m][n]; b:数据类型[] 数组名[] = new 数据类型[m][n]; B:注意下面定义的区别 int x; int y; int x,y; int[] x; int[] y[]; int[] x,y[