在PHP中使用array_chunk移动元素
作者:互联网
我有一个基本数组,在其中使用array_chunk将其分为3个元素.
$array = array(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'
);
$chunk = array_chunk($array, 3);
结果如下
[
[
"a",
"b",
"c"
],
[
"d",
"e",
"f"
],
[
"g",
"h"
]
]
(Las块具有2个元素)
如果最后一个“块”只有2个元素,我如何向下移动第一个块的元素,以便第一个元素具有2个元素?
它看起来应该像这样:
[
[
"a",
"b",
],
[
"c"
"d",
"e",
],
[
"f"
"g",
"h
]
]
(第一块包含2个元素)
解决方法:
最简单的方法是erray_reverse的多重执行:首先反转整个数组,然后拆分,然后反转每个块,最后是块数组.
作为单行代码,它看起来像这样:$chunk = array_reverse(array_map(‘array_reverse’,array_chunk(array_reverse($array),3)));
但是请记住,反转数组是一项昂贵的操作,因此,如果数组比示例中的数组实际要小,则不建议这样做.
更有效,但也有更多代码:
使用模计算需要在第一个块中的元素数:
$first_chunk_size = count($array)%3;
接下来,如果数组大小是块大小的倍数,则要避免使用空数组,如果取模为0,请更正块大小:
$first_chunk_size = $first_chunk_size == 0吗? 3:$first_chunk_size;
然后,剪下第一部分:
$first_chunk = array_slice($array,0,$first_chunk_size);
接下来,拆分数组的其余部分:
$chunks = array_chunk(array_slice($array,$first_chunk_size),3);
然后将第一个块和其他块组合成一个数组:
array_unshift($chunks,$first_chunk);
第二种方法的完整代码:
$array = [
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'
];
$first_chunk_size = count($array) % 3;
$first_chunk_size = $first_chunk_size == 0 ? 3 : $first_chunk_size;
$first_chunk = array_slice($array, 0, $first_chunk_size);
$chunks = array_chunk(array_slice($array,$first_chunk_size),3);
array_unshift($chunks, $first_chunk);
var_dump($chunks);
(显然,可以通过不一步一步做所有事情来简化此代码)
编辑:阅读了您对其他答复的评论后,您可以稍微修改此方法,然后将其转变为恢复功能.进行一些代码清理.它可能看起来像这样:
$array = [
'a', 'b', 'c', 'd', 'e', 'f', 'g'
];
function custom_array_chunk ($array) {
$first_chunk_size = count($array) % 3;
if ($first_chunk_size == 0) {
$chunks = array_chunk($array, 3);
} else {
$chunks = custom_array_chunk(array_slice($array,2));
array_unshift($chunks, array_slice($array, 0, 2));
}
return $chunks;
}
var_dump(custom_array_chunk($array));
这将对两种情况都有效,“ 1”和“ 2”元素“剩余”,并且将完全产生您告诉我们的内容.
标签:chunks,php,arrays 来源: https://codeday.me/bug/20191011/1889160.html