2016-09-19 82 views
1

我有一个这样的数组:如何将数组的每个第n个元素排序为不同的子阵列?

$arrayToFill=['a','b','c','d','e','f','g','h','k','l','m','n','o','p','r','u','w','x','y','z']; 

因此,有20个元素,我想阵列$batchArray看起来像这样迭代后:

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => a 
        [1] => b 
        [2] => c 
        [3] => d 
        [4] => e 
       ) 

      [1] => Array 
       (
        [0] => f 
        [1] => g 
        [2] => h 
        [3] => k 
        [4] => l 
       ) 

     ) 

    [1] => Array 
     (
      [0] => Array 
       (
        [0] => m 
        [1] => n 
        [2] => o 
        [3] => p 
        [4] => r 
       ) 

      [1] => Array 
       (
        [0] => u 
        [1] => w 
        [2] => x 
        [3] => y 
        [4] => z 
       ) 

     ) 

) 

所以在第六,十一等元素的新子阵是在该子阵列的第二个上创建新的更大的阵列。这里是我尝试和我做了什么到现在:

$a=0; 
$i=0; 
$arrayToFill=['a','b','c','d','e','f','g','h','k','l','m','n','o','p','r','u','w','x','y','z']; 
$batchArray=[]; 
$batchArray[$a]=[]; 
$batchArray[$a][$i]=[]; 

if($i==0){ 
    $currentNumber = ($i+1)*5; 
}else{ 
    $currentNumber = 5; 
} 

$currentNumberOfBathes=count($batchArray[$a])+1; 
$currentNumberBatch = 2; 

foreach($arrayToFill as $array){ 
    $numberOfElements=count($batchArray[$a][$i]); 
    $currentNumberOfBathes=count($batchArray[$a])+1; 
    if($numberOfElements>$currentNumber && $numberOfElements<$currentNumber+2){ 
     echo 'desilo se'; 
     echo $i; 
     $i++; 
     $batchArray[$a][$i]=[]; 
    } 

    array_push($batchArray[$a][$i],$array); 

} 

因此,这里是我所得到的:

所有的
Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => a 
        [1] => b 
        [2] => c 
        [3] => d 
        [4] => e 
        [5] => f 
       ) 

      [1] => Array 
       (
        [0] => g 
        [1] => h 
        [2] => k 
        [3] => l 
        [4] => m 
        [5] => n 
       ) 

      [2] => Array 
       (
        [0] => o 
        [1] => p 
        [2] => r 
        [3] => u 
        [4] => w 
        [5] => x 
       ) 

      [3] => Array 
       (
        [0] => y 
        [1] => z 
       ) 

     ) 

) 

首先,几个字母的地方丢失。当我试图限制这种子阵列包含5个字母,以增加其指数第三次是这样的:

foreach($arrayToFill as $array){ 

    $numberOfElements=count($batchArray[$a][$i]); 
    $currentNumberOfBathes=count($batchArray[$a])+1; 
    if($numberOfElements>$currentNumber && $numberOfElements<$currentNumber+2){ 
     $i++; 
     $batchArray[$a][$i]=[]; 
    } 
    if($currentNumberOfBathes>$currentNumberBatch && $currentNumberOfBathes<$currentNumberBatch+2){ 
     $a++; 
     $batchArray[$a]=[]; 
    } 
    array_push($batchArray[$a][$i],$array); 

} 

我得到这样的输出与警告:

Warning: array_push() expects parameter 1 to be array, null given 
Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => a 
        [1] => b 
        [2] => c 
        [3] => d 
        [4] => e 
        [5] => f 
       ) 

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

     ) 

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

) 

那么,是什么在这里发生,为什么连更大的谜团。请帮助

+0

烨,这有助于..谢谢! – Ognj3n

回答

3

只需使用array_chunk()几次即可大大简化此操作。第一次将它分成数组数组,后者每个最多包含5个元素。然后第二次将分割成到每个2个元素的数组。

它更容易看到比它是说:

print_r(array_chunk(array_chunk($arrayToFill, 5), 2)); 

结果:

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => a 
        [1] => b 
        [2] => c 
        [3] => d 
        [4] => e 
       ) 

      [1] => Array 
       (
        [0] => f 
        [1] => g 
        [2] => h 
        [3] => k 
        [4] => l 
       ) 

     ) 

    [1] => Array 
     (
      [0] => Array 
       (
        [0] => m 
        [1] => n 
        [2] => o 
        [3] => p 
        [4] => r 
       ) 

      [1] => Array 
       (
        [0] => u 
        [1] => w 
        [2] => x 
        [3] => y 
        [4] => z 
       ) 

     ) 

) 
相关问题