cod*_*ama 14 php arrays grouping implode multidimensional-array
我有一个数组,其中可以有几个项目,例如:
Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
etc
Run Code Online (Sandbox Code Playgroud)
我需要以最快的方式重组此数组,以便它最多包含X个项目.因此,如果我说X是3,那么结果数组必须是:
Item 1 , Item 2
Item 3, Item 4
Item 5, Item 6
etc
Run Code Online (Sandbox Code Playgroud)
或者如果它有7个项目,它将是:
Item 1 , Item 2, Item 3,
Item 4, Item 5,
Item 6, Item 7
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?
我从这开始,但似乎真的必须有一个更简单的方法:
foreach ($addressParts as $part)
{
if (empty($part)) continue;
if (empty($addressLines[$count])) $addressLines[$count] = '';
$addressLines[$count] .= $part;
$count++;
if ($count > 2) $count = 0;
}
Run Code Online (Sandbox Code Playgroud)
此外,这不起作用,因为你最终会得到这个:
item 1, item 4, item 7
item 2, item 5
item 3, item 6
Run Code Online (Sandbox Code Playgroud)
......这是错的.有什么想法吗?
UPDATE
如果我开始:
Array
(
[0] => item 1
[1] => item 2
[2] => item 3
[3] => item 4
[4] => item 5
[5] => item 6
[6] => item 7
)
Run Code Online (Sandbox Code Playgroud)
我想结束:
Array
(
[0] => item 1, item 2, item 3
[1] => item 4, item 5
[2] => item 6, item 7
)
Run Code Online (Sandbox Code Playgroud)
合理?
根据您的示例,此函数将元素组合到新数组.它处理任意数量的输入元素.
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);
Run Code Online (Sandbox Code Playgroud)
产量
Array
(
[0] => Item 1, Item 2, Item 3
[1] => Item 4, Item 5
[2] => Item 6, Item 7
)
Run Code Online (Sandbox Code Playgroud)
根据给定的输出编辑"固定"输出.
编辑请参阅注释九个元素,最多可测试12个元素.谢谢sectus
抱歉,它应该是一个评论,但我不能发表评论,也许是因为我的声誉......
当您有一个包含 7 个元素的数组时,您知道要将数组除以 3 还是必须找到除数?
编辑1 像这样的东西?:
$formatedAddress = array();
$divisor = 3;
$key = 0;
$counter =1;
foreach ($addressParts as $part)
{
if(!empty($part){
$formattedAddress[$key] = $part;
if($counter != $divisor){
$counter++;
}else{
$counter = 1;
$key++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:
我发现了一些错误:
$formatedAddress = array();
$divisor = 3;
$key = 0;
$counter =1;
foreach ($addressParts as $part)
{
if(!empty($part)){
$formatedAddress[$key][] = $part;
if($counter != $divisor){
$counter++;
}else{
$counter = 1;
$key++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
985 次 |
| 最近记录: |