У меня есть массив сказать
arr[]={1,2,3,4,6,7,8,10,11,12,13,14,16,17,18}
и мне нужно 3 блока, содержащих по 3 элемента в каждом. [3 будет динамическим]
Выход должен быть
block[1]={1,2,3}
block[2]={6,7,8}
block[3]={10,11,12}
какой будет скрипт зацикливания в php
Вы могли бы использовать array_chunk
$arr = range(1, 18);
$result = array_chunk($arr, 3);
print_r($result);
использование array_chunk ()
$arr=[1,2,3,4,6,7,8,10,11,12,13,14,16,17,18];
unset($arr[3]); // unset key 4
$chunks = array_chunk($arr, 3,true);// pass true here
print_r($chunks);
$arr=[1,2,3,4,6,7,8,10,11,12,13,14,16,17,18];
$block = array_chunk($arr,3);
print_r($block);
Выход
Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[1] => Array
(
[0] => 4
[1] => 6
[2] => 7
)
[2] => Array
(
[0] => 8
[1] => 10
[2] => 11
)
[3] => Array
(
[0] => 12
[1] => 13
[2] => 14
)
[4] => Array
(
[0] => 16
[1] => 17
[2] => 18
)
)
$block[] = array_slice($arr, 0, 3, true);
$block[] = array_slice($arr, 4, 3, true);
$block[] = array_slice($arr, 7, 3, true);
print_r($block);
Выход
Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[1] => Array
(
[4] => 6
[5] => 7
[6] => 8
)
[2] => Array
(
[7] => 10
[8] => 11
[9] => 12
)
)
См .: демонстрация
Вы можете сделать это, используя только одну строку кода.
$array = array_chunk(array_slice($array, 0, 9), 3);
array_slice
используется для вырезания части из 9 пар ключ-значение из вашего исходного массива.
array_chunk
затем делит его на куски по 3 каждый.
Если ваш порядок массивов как-то неверен, приведенный выше код не будет работать. Чтобы решить эту проблему, вам сначала нужно sort
ваш массив. Это можно сделать следующим образом:
$array = sort($array);
Вышеприведенная функция будет сортировать ваш массив по номеру от низкого до высокого.
Выполнение тестового прогона возвращает меня:
array(3) {
[0]=>
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
[1]=>
array(3) {
[0]=>
int(4)
[1]=>
int(5)
[2]=>
int(6)
}
[2]=>
array(3) {
[0]=>
int(7)
[1]=>
int(8)
[2]=>
int(9)
}
}