Dan*_*ris 25 php arrays split multidimensional-array
我有一个18个值的数组:
$array = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r');
Run Code Online (Sandbox Code Playgroud)
我想将这个数组拆分成12个不同的数组,所以它应该是这样的:
array(
0 => array('a', 'b'),
1 => array('c', 'd'),
2 => array('e', 'f'),
3 => array('g', 'h'),
4 => array('i', 'j'),
5 => array('k', 'l'),
6 => array('m'),
7 => array('n'),
8 => array('o'),
9 => array('p'),
10 => array('q'),
11 => array('r')
)
Run Code Online (Sandbox Code Playgroud)
我的功能似乎不起作用
function array_split($array, $parts){
return array_chunk($array, ceil(count($array) / $parts));
}
$result = array_split($array, 12);
Run Code Online (Sandbox Code Playgroud)
因为我得到9个不同的数组而不是12个.它会返回
array(
0 => array('a', 'b'),
1 => array('c', 'd'),
2 => array('e', 'f'),
3 => array('g', 'h'),
4 => array('i', 'j'),
5 => array('k', 'l'),
6 => array('m', 'n'),
7 => array('o', 'p'),
8 => array('q', 'r')
)
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?谢谢.
Bab*_*aba 32
这个简单的功能对你有用:
用法
$array = range("a", "r"); // same as your array
print_r(alternate_chunck($array,12));
Run Code Online (Sandbox Code Playgroud)
产量
Array
(
[0] => Array
(
[0] => a
[1] => b
)
[1] => Array
(
[0] => c
[1] => d
)
[2] => Array
(
[0] => e
[1] => f
)
[3] => Array
(
[0] => g
[1] => h
)
[4] => Array
(
[0] => i
[1] => j
)
[5] => Array
(
[0] => k
[1] => l
)
[6] => Array
(
[0] => m
)
[7] => Array
(
[0] => n
)
[8] => Array
(
[0] => o
)
[9] => Array
(
[0] => p
)
[10] => Array
(
[0] => q
)
[11] => Array
(
[0] => r
)
)
Run Code Online (Sandbox Code Playgroud)
更新以上内容可能对大多数情况没用...这里是另一种类型的块
$array = range("a", "r"); // same as your array
print_r(fill_chunck($array, 5));
Run Code Online (Sandbox Code Playgroud)
产量
Array
(
[0] => Array
(
[0] => a
[1] => b
[2] => c
[3] => d
)
[1] => Array
(
[0] => e
[1] => f
[2] => g
[3] => h
)
[2] => Array
(
[0] => i
[1] => j
[2] => k
[3] => l
)
[3] => Array
(
[0] => m
[1] => n
[2] => o
[3] => p
)
[4] => Array
(
[0] => q
[1] => r
)
)
Run Code Online (Sandbox Code Playgroud)
这将确保该组在任何时间都不超过另一个没有限制的5个元素
使用的功能
function alternate_chunck($array, $parts) {
$t = 0;
$result = array();
$max = ceil(count($array) / $parts);
foreach(array_chunk($array, $max) as $v) {
if ($t < $parts) {
$result[] = $v;
} else {
foreach($v as $d) {
$result[] = array($d);
}
}
$t += count($v);
}
return $result;
}
function fill_chunck($array, $parts) {
$t = 0;
$result = array_fill(0, $parts - 1, array());
$max = ceil(count($array) / $parts);
foreach($array as $v) {
count($result[$t]) >= $max and $t ++;
$result[$t][] = $v;
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
数学中的神奇之处在于确定哪部分元素属于第一组块,其中所有列都填充在每行中,而哪些元素属于第二组(如果该组甚至应该存在),其中除了最右边的所有列列已满。
让我画出我正在谈论的内容。标记>两个分块数组之间的划分。
$size = 9; ------------- $size = 9; -------------
$maxRows = 4; 1 | A , B , C | $maxRows = 3; | A , B , C |
$columns = 3; > |-----------| $columns = 3; 1 | D , E , F |
$fullRows = 1; | D , E | $fullRows = 3; | G , H , I |
2 | F , G | > -------------
| H , I | 2 n/a
---------
$size = 18; --------- $size = 17; -------------------------------------
$maxRows = 12; | A , B | $maxRows = 2; 1 | A , B , C , D , E , F , G , H , I |
$columns = 2; | C , D | $columns = 9; > -------------------------------------
$fullRows = 6; | E , F | $fullRows = 1; 2 | J , K , L , M , N , O , P , Q |
1 | G , H | ---------------------------------
| I , J |
| K , L |
> ---------
| M |
| N |
| O |
2 | P |
| Q |
| R |
-----
Run Code Online (Sandbox Code Playgroud)
代码:(演示)
function double_chunk($array, $maxRows) {
$size = count($array);
$columns = ceil($size / $maxRows);
$lessOne = $columns - 1;
$fullRows = $size - $lessOne * $maxRows;
if ($fullRows == $maxRows) {
return array_chunk($array, $fullRows); // all columns have full rows, don't splice
}
return array_merge(
array_chunk(
array_splice($array, 0, $columns * $fullRows), // extract first set to chunk
$columns
),
array_chunk($array, $lessOne) // chunk the leftovers
);
}
var_export(double_chunk(range('a', 'i'), 3));
Run Code Online (Sandbox Code Playgroud)
如果您不介意迭代array_splice()调用,这会更简短,并且可能更容易理解(...也许不是):
代码:(演示)
function custom_chunk($array, $maxRows) {
$size = count($array);
$columns = ceil($size / $maxRows);
$lessOne = $columns - 1;
$fullRows = $size - $lessOne * $maxRows;
for ($i = 0; $i < $maxRows; ++$i) {
$result[] = array_splice($array, 0, ($i < $fullRows ? $columns : $lessOne));
}
return $result;
}
var_export(custom_chunk(range('a', 'r'), 12));
Run Code Online (Sandbox Code Playgroud)
你说:
我在数据库中有13个类别,我想将它们分组为12个数组.如果有超过12个类别,则从第一个数组开始插入剩余的值.
这有效,但如果输入数组中有更多元素,那么输出应该是什么?
$array = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm');
function s($array, $am) {
$r = array();
$d = count($array) - $am+1;
foreach ($array as $k => $v) {
if ($k < $d) {
if (!isset($r[0])) {
$r[0] = array($v);
} else {
$r[0] = array_merge($r[0], array($v));
}
} else {
$r[] = array($v);
}
}
return $r;
}
Run Code Online (Sandbox Code Playgroud)
将返回
Array
(
[0] => Array
(
[0] => a
[1] => b
)
[1] => Array
(
[0] => c
)
[2] => Array
(
[0] => d
)
[3] => Array
(
[0] => e
)
[4] => Array
(
[0] => f
)
[5] => Array
(
[0] => g
)
[6] => Array
(
[0] => h
)
[7] => Array
(
[0] => i
)
[8] => Array
(
[0] => j
)
[9] => Array
(
[0] => k
)
[10] => Array
(
[0] => l
)
[11] => Array
(
[0] => m
)
)
Run Code Online (Sandbox Code Playgroud)