我有一个可以包含多个项目的数组,例如:
Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
etc
我需要最快的方法来重构这个数组,使其最多包含 X 个项目。所以如果我说 X 是 3,那么结果数组一定是:
Item 1 , Item 2
Item 3, Item 4
Item 5, Item 6
etc
或者如果它有 7 个项目,则为:
Item 1 , Item 2, Item 3,
Item 4, Item 5,
Item 6, Item 7
最简单的方法是什么?
我是从这个开始的,但似乎真的必须有更简单的方法:
foreach ($addressParts as $part)
{
if (empty($part)) continue;
if (empty($addressLines[$count])) $addressLines[$count] = '';
$addressLines[$count] .= $part;
$count++;
if ($count > 2) $count = 0;
}
另外,这也行不通,因为你最终会得到这样的结果:
item 1, item 4, item 7
item 2, item 5
item 3, item 6
...这是错误的。有什么想法吗?
更新
如果我开始:
Array
(
[0] => item 1
[1] => item 2
[2] => item 3
[3] => item 4
[4] => item 5
[5] => item 6
[6] => item 7
)
我想结束:
Array
(
[0] => item 1, item 2, item 3
[1] => item 4, item 5
[2] => item 6, item 7
)
有意义吗?
最佳答案
此函数根据您的示例将元素组合到一个新数组中。它处理任意数量的输入元素。
function ReduceArray($input, $length) {
$frac = $length / count($input);
$frac = $frac + 0.0001; // Offset for float calculations
$index = 0.0;
// Copy the elements, rolling over on $index
$temp = array();
foreach ($input as $part) {
$i= floor($index);
if (!isset($temp[$i])) {
$temp[$i] = array($part);
} else {
$temp[$i][] = $part;
}
$index += $frac;
}
// Combine the sub arrays
$output = array();
foreach ($temp as $line) {
$output[] = implode(', ', $line);
}
return $output;
}
$input = array('Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6', 'Item 7');
$output = ReduceArray($input, 3);
print_r($output);
输出
Array
(
[0] => Item 1, Item 2, Item 3
[1] => Item 4, Item 5
[2] => Item 6, Item 7
)
根据给定的输出编辑“固定”输出。
编辑 九个元素见评论,最多测试 12 个元素。感谢教派
关于php - 重组数组的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19684203/