1

我有一个数组:

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
        )

)
4

6 回答 6

5

那应该工作:

$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);
于 2012-08-30T11:42:44.120 回答
1

您可以array_splice用于拆分数组,但是您需要设置条件对吗?你想在什么基础上拆分它们?

您可以使用array_merge将它们带回array数组中。

如果是您当前的代码,代码将是:

PHP 代码

<?php
    $array = array(0,1,2,3,4,5,6,7,8,9);
    $final = array(
        array_splice($array, 0, 3),
        array_splice($array, 1, 2),
        array_splice($array, 1, 2),
        array_splice($array, 1, 2),
    );
    print_r($final);
?>

输出

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

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

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

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

)

在这里摆弄:http ://codepad.org/JzxcZ2Q1

于 2012-08-30T11:23:03.427 回答
1

重复调用 ofarray_splice()似乎是一个很好的方法。这是 István Őri 答案的更简洁版本。从 5 中减去即可消除使用模运算符的需要。

代码:(演示

$array = range(1, 10);

$chunks = [];
$chunkSize = 3;

while ($array) {
    $chunkSize = 5 - $chunkSize;
    $chunks[] = array_splice($array, 0, $chunkSize);
}
var_export($chunks);

此代码段$array在迭代时进行修改。 array_splice()不断从数组的前面删除元素。最终数组将变为空并且while()条件将失败——打破循环。

于 2021-08-30T09:29:58.267 回答
0

您可以使用它,它不是最优雅的,但它会为您解决问题 - 您可以很好地修改它并对其进行调整以进一步适应您的目的:

<?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);
?>

输出:

array(4) {
  [0]=>
  array(2) {
    [0]=>
    int(0)
    [1]=>
    int(1)
  }
  [1]=>
  array(3) {
    [0]=>
    int(2)
    [1]=>
    int(3)
    [2]=>
    int(4)
  }
  [2]=>
  array(2) {
    [0]=>
    int(5)
    [1]=>
    int(6)
  }
  [3]=>
  array(3) {
    [0]=>
    int(7)
    [1]=>
    int(8)
    [2]=>
    int(9)
  }
}
于 2012-08-30T11:31:42.990 回答
0
$tobechunked_arr = array(0,1,2,3,4,5,6,7,8,9);
$chunk_size_arr = array(3,2,3,2);
$j = 0;
foreach($chunk_size_arr as $key => $val)
{
    for($i = 0; $i < $val; $i++)
    {
        $result_arr[$key][] = $tobechunked_arr[$j];
        $j++;
    }
}

echo "<pre>";
print_r($result_arr);
于 2018-01-31T08:05:12.763 回答
-1

试试这个

<?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:定义

块 2

0:吉

1:jkl

块 3

0: 无

1:pqr

块 4

0:斯图

1:vwx

块 5

0:yz

于 2012-08-30T11:23:40.213 回答