Создать динамический подмассив из большого

У меня есть массив, созданный с помощью взрыва и разделителя #. Я безуспешно пытаюсь создать из этого большого массива в PHP подмассивы (количество подмассивов не фиксировано и может варьироваться). Цель состоит в том, чтобы сделать каждые 10 # новым подмассивом и сохранить все значения между 0 - 9, 10 - 19 и т. д.

Вот мой большой массив, над которым должен работать PHP: ( ) - это просто комментарий, чтобы быть более понятным, в коде есть только #

#ACT/A (line 1)
#XXX (2)
#2 (3)
#51,6844 (4)
#50,7000 (5)
#101,40 (6)
#-1,97 (7)
#-1,91 (8)
#-0,61 (9)
#3,34 (10)

#ACT/B (11
#X
#4
#68,86750
#63,2700
#253,08
#-22,39
#-8,13
#-0,41
#8,27 (line 20)

#ACT/C
#X
#15
#10,33132
#4,18
#62,70
#-92,27
#-59,54
#0,00
#2,03

Мой PHP-код (который не работает):

$start = 1;
$equities = explode("#", $allEquities); // split the big array here 

//$howManyEquities is a number between 1 and X, only int, not float)
while($start <= $howManyEquities) // doing the loop for each equities counted (could vary from 1 to x)
{
     $array[$howManyEquities] = $equities[0]; // trying to store in a array the result (line 1 from the example above, and then line 11, etc...)
     $equities = $equities[$start * 10]; // trying to prepare next loop, start (1) * 10 = 11 to catch next time result from line 11

     $start++;
}

Подводя итог, я, вероятно, очень не ясен, и я извиняюсь. Вот пример динамического массива, который я хочу из кода (я пробовал цикл foreach, но, похоже, не работал):

BigArray (the number of key inside vary according to the number of equity) = (
     subArray1 = (ACT/A, XXX, 2, 51,6844, etc from line 1 to 10)
     subArray2 = (ACT/B, X, 68,86750, etc from line 11 to 20)
     subArray3 = (ACT/C, etc)
     subArrayX = (ACT/X, etc)

Это может быть возобновлено каждые десять первых значений в первом массиве, следующие десять в другом массиве и так далее, пока мы не покроем весь большой массив (поэтому я попробовал $start * 10 в своем коде). Я должен уточнить, что если $howManyEquities = 7, например, будет 70 #, если = 5, то будет 50 # и так далее.

Обновлено: Решение благодаря @user3783243

в то время как ($ start <= $howManyEquities) {

$newArray = array_chunk($equities, 10);
$start++;

}

Не стесняйтесь, если вам нужна дополнительная информация, спасибо за чтение и наслаждайтесь выходными! С уважением

Может быть, тогда взорвется php.net/manual/en/function.array-chunk.php

user3783243 06.05.2022 13:38

@user3783243 user3783243 невероятно, это работает очень хорошо, я должен поблагодарить вас. Наслаждайся выходными, друг!

C K 06.05.2022 13:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как сказал @user3783243, array_chunk делает свою работу.

Исходная строка:

$string = '#ACT/A (line 1)
#XXX (2)
#2 (3)
#51,6844 (4)
#50,7000 (5)
#101,40 (6)
#-1,97 (7)
#-1,91 (8)
#-0,61 (9)
#3,34 (10)

#ACT/B (11
#X
#4
#68,86750
#63,2700
#253,08
#-22,39
#-8,13
#-0,41
#8,27 (line 20)

#ACT/C
#X
#15
#10,33132
#4,18
#62,70
#-92,27
#-59,54
#0,00
#2,03';

Код:

// Explode.
$array =  explode('#', $string);
// Should trim all values to f.e. remove new lines.
$array = array_map('trim', $array);
// Should filter empty values (due to empty lines in string).
$array = array_filter($array, 'strlen');
// Split into chunks.
$array = array_chunk($array, 10, true);

Выход:

echo var_export($array, true) . PHP_EOL;
// [
//     0 => [
//         1  => 'ACT/A (line 1)',
//         2  => 'XXX (2)',
//         3  => '2 (3)',
//         4  => '51,6844 (4)',
//         5  => '50,7000 (5)',
//         6  => '101,40 (6)',
//         7  => '-1,97 (7)',
//         8  => '-1,91 (8)',
//         9  => '-0,61 (9)',
//         10 => '3,34 (10)',
//     ],
//     1 => [
//         11 => 'ACT/B (11',
//         12 => 'X',
//         13 => '4',
//         14 => '68,86750',
//         15 => '63,2700',
//         16 => '253,08',
//         17 => '-22,39',
//         18 => '-8,13',
//         19 => '-0,41',
//         20 => '8,27 (line 20)',
//     ],
//     2 => [
//         21 => 'ACT/C',
//         22 => 'X',
//         23 => '15',
//         24 => '10,33132',
//         25 => '4,18',
//         26 => '62,70',
//         27 => '-92,27',
//         28 => '-59,54',
//         29 => '0,00',
//         30 => '2,03',
//     ],
// ]

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

C K 06.05.2022 14:42

Другие вопросы по теме