将一个数组拆分为N个数组,所有的子数组的数量

想把$array(10个元素) 拆为4个子数组,个中数量为:3 3 2 2
假如利用PHP函数 array_chunk()只会生成 3 3 3 1      。如:

$rr = get_array($array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 4); printf("<p>get_array输出数据为:</p><pre>%s</pre>\n", var_export($rr , true));

output:

array_chunk()输出数据为: array ( 0 => array ( 0 => 1, 1 => 2, 2 => 3, ), 1 => array ( 0 => 4, 1 => 5, 2 => 6, ), 2 => array ( 0 => 7, 1 => 8, 2 => 9, ), 3 => array ( 0 => 10, ), )

不切合要求

所以只能自写函数。

我同学写的:

/** * 将一个数组拆分为N个数组,所有的子数组的数量相差不高出1 * $array array 要拆分的数组 * $cum_nums ini c拆分成几个数组 */ function get_array($array = null, $cum_nums) { $n = count($array); //数组的长度 $m = intval($n / $cum_nums); //拆分后的每个一维数组中最短的数组个数 $m_m = $n % $cum_nums; //撤除恰好符合的,还剩余几多个数组 for($i = 0;$i < $cum_nums;$i++) { if ($m_m > 0) { $k = 1; } else { $k = 0; } $m_m--; for($j = 0;$j < ($m + $k);$j++) { foreach($array as $key => $value) { ${array_.$i}[] = $value; unset($array[$key]); break; } } $array_array[] = ${array_.$i}; } return $array_array; } $rr = get_array($array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 4); printf("<p>get_array输出数据为:</p><pre>%s</pre>\n", var_export($rr , true));

ouput:

get_array输出数据为: array ( 0 => array ( 0 => 1, 1 => 2, 2 => 3, ), 1 => array ( 0 => 4, 1 => 5, 2 => 6, ), 2 => array ( 0 => 7, 1 => 8, ), 3 => array ( 0 => 9, 1 => 10, ), )成果已经乐成实现

本日溘然看到了php官网,尚有更好的,一个轮回就实现了

/** * 将二维数组拆分为N个数组,所有的子数组的数量相差不高出1 (PHP官网版) * $list array 要拆分的数组 * $p ini c拆分成几个数组 */ function partition( $list, $p ) { $listlen = count( $list ); $partlen = floor( $listlen / $p ); $partrem = $listlen % $p; $partition = array(); $mark = 0; for ($px = 0; $px < $p; $px++) { $incr = ($px < $partrem) ? $partlen + 1 : $partlen; $partition[$px] = array_slice( $list, $mark, $incr ); $mark += $incr; } return $partition; } $rr = partition( $array, 4 ); printf("<p>partition()输出数据为:</p><pre>%s</pre>\n",var_export( $rr ,TRUE));

output:

partition()输出数据为: array ( 0 => array ( 0 => 1, 1 => 2, 2 => 3, ), 1 => array ( 0 => 4, 1 => 5, 2 => 6, ), 2 => array ( 0 => 7, 1 => 8, ), 3 => array ( 0 => 9, 1 => 10, ), )

end

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/7901.html