2015-04-14 6 views
0

Массив должен быть организован таким образом, чтобы вместо того, чтобы иметь каждое значение в массиве, значения массива массивов со значениями данных и каждый из этих вложенных массивов должны иметь максимальное число значений.PHP реорганизация массива

Так он должен начать с этого:

$data = array(
    0 => 'Data 1', 
    1 => 'Data 2', 
    2 => 'Data 3', 
    3 => 'Data 4', 
    4 => 'Data 5', 
    5 => 'Data 6', 
); 

, а затем, учитывая, что $max = 3;, массив должен стать этим:

$data = array(
    0 => array(
    0 => 'Data 1', 
    1 => 'Data 2', 
    2 => 'Data 3', 
), 
    1 => array(
    0 => 'Data 4', 
    1 => 'Data 5', 
    2 => 'Data 6', 
), 
); 

Я чувствую, что я близко, но я продолжаю проигранного четвертое значение данных, когда мой макс установлен на 3.

$max_col = 3; 
$current_row = 0; 
$current_col = 0; 
foreach ($data_values as $val) { 
    if ($current_col < $max_col) { 
    $new_data[$current_row][$current_col] = $val; 
    $current_col++; 
    } else { 
    $current_col = 0; 
    $current_row++; 
    $new_data[$current_row][$current_col] = $val; 
    } 
} 

Что я в итоге получим:

$data = array(
    0 => array(
    0 => 'Data 1', 
    1 => 'Data 2', 
    2 => 'Data 3', 
), 
    1 => array(
    0 => 'Data 5', 
    1 => 'Data 6', 
), 
); 
+1

Посмотрите на [array_chunk()] (http://www.php.net/manual/en/function.array- chunk.php) –

+0

Не изобретайте велосипед, используйте ответ Джонатана. Это делает код чистым и потому что он является родной функцией, он работает намного быстрее, чем код пользователя. – axiac

ответ

2

Посмотрите array_chunk

<?php 
$data = array(
    0 => 'Data 1', 
    1 => 'Data 2', 
    2 => 'Data 3', 
    3 => 'Data 4', 
    4 => 'Data 5', 
    5 => 'Data 6', 
); 

$newData = array_chunk($data, 3); 

print_r($newData); 

Выходы:

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

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

) 

http://codepad.viper-7.com/AwGZ5V

1

Просто прибавка $ CURRENT_ROW в конце:

else { 
    $current_col = 0; 
    $new_data[$current_row][$current_col] = $val; 
    $current_row++; 
    } 
1

ваш код почти нормально, за исключением незначительного добавления

$max_col = 3; 
$current_row = 0; 
$current_col = 0; 
foreach ($data_values as $val) { 
    if ($current_col < $max_col) { 
    $new_data[$current_row][$current_col] = $val; 
    $current_col++; 
    } else { 
     $current_col = 0; 
     $current_row++; 
     $new_data[$current_row][$current_col] = $val; 
     $current_col++; //this is the new line you have to add 
    } 

}