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 に答える
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 に答える
-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 に答える