gpt4 book ai didi

php - 重组数组的最快方法?

转载 作者:IT王子 更新时间:2023-10-29 00:03:49 25 4
gpt4 key购买 nike

我有一个可以包含多个项目的数组,例如:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com