Php 将数组拆分为不同大小的块

Php 将数组拆分为不同大小的块,php,arrays,Php,Arrays,我有一个数组: Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 ) 我想将数组分成大小为2、3、2、3的块,以此类推: Array ( [0] => Array (

我有一个数组:

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 7
    [8] => 8
    [9] => 9
)
我想将数组分成大小为2、3、2、3的块,以此类推:

Array
(
    [0] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 2
        )

    [1] => Array
        (
            [0] => 3
            [1] => 4
        )

    [2] => Array
        (
            [0] => 5
            [1] => 6
            [2] => 7
        )

    [3] => Array
        (
            [0] => 8
            [1] => 9
        )

)
到目前为止我什么都没有,想不出一个简单的方法来做这件事!谢谢。

您可以使用拆分阵列,但您需要正确设置条件吗?你想在什么基础上把他们分开

您可以使用将它们带回数组的
数组中

对于您当前的代码,代码将为:

PHP代码 这里拉小提琴:你可以用来分割数组,但是你需要设置正确的条件吗?你想在什么基础上把他们分开

您可以使用将它们带回数组的
数组中

对于您当前的代码,代码将为:

PHP代码 在这里拉小提琴:试试这个

<?php
$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($input_array, 2));
print_r(array_chunk($input_array, 2, true));
?>

更新

<?php 
$myArray = array("abc","def","ghi","jkl","mno","pqr","stu","vwx","yz");
$newArray = array_chunk($myArray, 2, false);
// Now process the multidimensional array made from array_chunk()
$i = 0;
foreach ($newArray as $inner_array) {
    $i++;
    echo "<h2>Chunk $i</h2>";
    while (list($key, $value) = each($inner_array)) {    
        echo "$key: $value <br />"; 
    }
}
?>

输出

块1

0:abc

1:def

块2

0:ghi

1:jkl

块3

0:mno

1:pqr

块4

0:stu

1:vwx

块5

0:yz

试试这个

<?php
$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($input_array, 2));
print_r(array_chunk($input_array, 2, true));
?>

更新

<?php 
$myArray = array("abc","def","ghi","jkl","mno","pqr","stu","vwx","yz");
$newArray = array_chunk($myArray, 2, false);
// Now process the multidimensional array made from array_chunk()
$i = 0;
foreach ($newArray as $inner_array) {
    $i++;
    echo "<h2>Chunk $i</h2>";
    while (list($key, $value) = each($inner_array)) {    
        echo "$key: $value <br />"; 
    }
}
?>

输出

块1

0:abc

1:def

块2

0:ghi

1:jkl

块3

0:mno

1:pqr

块4

0:stu

1:vwx

块5


0:yz

您可以使用它,它不是最优雅的,但它只会为您带来好处-您可以对其进行巧妙的修改,并对其进行调整,以进一步满足您的目的:

<?php

$originalArray = array(0,1,2,3,4,5,6,7,8,9);


$counter=count($originalArray);
$isTwo=true;
$newArray=array();
$arrElement=0;
$i=0;
while($i<$counter)
{
    if($isTwo)
    {
        $newArray[$arrElement]= array();
        for($j=0; $j<2; $j++)
        {
            $newArray[$arrElement][$j]=$originalArray[$i+$j];
        }
        $i+=2;
        $isTwo=false;
        $arrElement++;
    }
    else
    {
        $newArray[$arrElement]= array();
        for($j=0; $j<3; $j++)
        {
            $newArray[$arrElement][$j]=$originalArray[$i+$j];
        }
        $i+=3;
        $isTwo=true;
        $arrElement++;
    }
}
    var_dump($newArray);
?>

您可以使用它,它不是最优雅的,但它只会为您带来好处-您可以很好地修改它,并对其进行调整,以进一步满足您的目的:

<?php

$originalArray = array(0,1,2,3,4,5,6,7,8,9);


$counter=count($originalArray);
$isTwo=true;
$newArray=array();
$arrElement=0;
$i=0;
while($i<$counter)
{
    if($isTwo)
    {
        $newArray[$arrElement]= array();
        for($j=0; $j<2; $j++)
        {
            $newArray[$arrElement][$j]=$originalArray[$i+$j];
        }
        $i+=2;
        $isTwo=false;
        $arrElement++;
    }
    else
    {
        $newArray[$arrElement]= array();
        for($j=0; $j<3; $j++)
        {
            $newArray[$arrElement][$j]=$originalArray[$i+$j];
        }
        $i+=3;
        $isTwo=true;
        $arrElement++;
    }
}
    var_dump($newArray);
?>
这应该是可行的:

$a = array(0 => 0,1 => 1,2 => 2,3 => 3,4 => 4, 5 => 5, 6 => 6,7 => 7,8 => 8,9 => 9);
$chunks = array();
$i=1;
while(count($a)){
    $chunks[] = array_splice($a, 0,(2+($i%2)),array());

    $i++;
}

echo "<pre>";
var_dump($chunks);
a=array(0=>0,1=>1,2=>2,3=>3,4=>4,5=>5,6=>6,7=>7,8=>8,9=>9);
$chunks=array();
$i=1;
而(计算($a)){
$chunks[]=数组拼接($a,0,(2+($i%2)),数组();
$i++;
}
回声“;
var_dump($chunks);
应该有效:

$a = array(0 => 0,1 => 1,2 => 2,3 => 3,4 => 4, 5 => 5, 6 => 6,7 => 7,8 => 8,9 => 9);
$chunks = array();
$i=1;
while(count($a)){
    $chunks[] = array_splice($a, 0,(2+($i%2)),array());

    $i++;
}

echo "<pre>";
var_dump($chunks);
a=array(0=>0,1=>1,2=>2,3=>3,4=>4,5=>5,6=>6,7=>7,8=>8,9=>9);
$chunks=array();
$i=1;
而(计算($a)){
$chunks[]=数组拼接($a,0,(2+($i%2)),数组();
$i++;
}
回声“;
var_dump($chunks);
$tobechunked_arr=数组(0,1,2,3,4,5,6,7,8,9);
$chunk\u size\u arr=数组(3,2,3,2);
$j=0;
foreach($chunk\u size\u arr as$key=>$val)
{
对于($i=0;$i<$val;$i++)
{
$result_arr[$key][]=$tobechunked_arr[$j];
$j++;
}
}
回声“;
打印(结果);
$tobechunked_arr=数组(0,1,2,3,4,5,6,7,8,9);
$chunk\u size\u arr=数组(3,2,3,2);
$j=0;
foreach($chunk\u size\u arr as$key=>$val)
{
对于($i=0;$i<$val;$i++)
{
$result_arr[$key][]=$tobechunked_arr[$j];
$j++;
}
}
回声“;
打印(结果);


您的示例显示3,然后2,然后3,2 3等,即它以3开头,而不是文本中的2。@dontomaso任何一种方式都可以。您的示例显示3,然后2,然后3,2 3等,即。,它以3开头,而不是文本中的2。@dontomaso任何一种方式都可以。我需要它以2和3为单位。这只会将它分成2个单位,按这个$myArray=array(“abc”、“def”、“ghi”、“jkl”、“mno”、“pqr”、“stu”、“vwx”、“yz”)$newArray=array_chunk($myArray,2,false);//现在处理由array_chunk()生成的多维数组$i=0;foreach($newArray as$internal_array){if($i==2|||$i==3){echo“Chunk$i”;而(list($key,$value)=each($internal_array)){echo“$key:$value
“;}}}$i++}}}}我需要它是2和3的块,这只会将它分成2个块,这个$myArray=array(“abc”,“def”,“ghi”,“jkl jkl”,“mno”,“pqr”、“stu”、“vwx”、“yz”);$newArray=array_chunk($myArray,2,false);//现在处理由array_chunk()生成的多维数组($i=0;foreach($newArray as$internal_array){if($i==2 | | |$i==3){echo“chunk$i”;而(list($key,$value)=each($internal(数组)){echo“$key:$value
”}}$i++;}它们只需要按照与原始数组相同的顺序进行拆分,就像我给出的示例一样。你能举例说明我如何使用这些函数进行拆分吗?完成了。请查看示例和小提琴,以获得相同的输出。@jleagles因为我不喜欢编辑其他人的答案,所以我在你的答案的基础上做了一个粘贴,并做了一些更正。。你呢每次需要使用起点0和长度调用array_splice,即array_splice(0,3)、array_splice(0,2)。谢谢,我本来打算接受它,并将其转换为循环版本,当有9个以上时,但@István比我快。它们只需要按照与原始数组相同的顺序进行拆分,如我给出的示例。你能举一个示例说明我如何使用这些函数进行拆分吗?完成了。请查看示例和提供sa的小提琴me输出。@jleagles因为我不喜欢编辑其他人的答案,所以我根据您的答案制作了一个粘贴,并做了一些更正。您每次都需要使用起始点0和长度调用array_splice,即array_splice(0,3),array_splice(0,2)。谢谢,我本来打算接受它,并将其转换为循环版本,当有9个以上时,但@István将我打败为+1,用于使用模运算符动态切换拼接长度。我正在考虑使用if。我从这里学到了一些东西。+1用于使用模运算符动态切换拼接长度。我考虑用if做这件事。我从这里学到了一些东西。