Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 16.04.2021
Сообщений: 62

Как найти вхождение в массив строки с названием раздела, затем добавлять элемент через каждые 7 до нового вхожденя?

13.02.2025, 16:47. Показов 1239. Ответов 2

Студворк — интернет-сервис помощи студентам
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Array
(
    [0] => Нормативно-правовой раздел
    [1] => 1
    [2] => Основы законодательства
    [3] => 22
    [4] => 18
    [5] => 2
    [6] => 2
    [7] => З
    [8] => Раздел общепрофессиональных дисциплин
    [9] => 2
    [10] => Общая психология
    [11] => 60
    [12] => 36
    [13] => 4
    [14] => 20
    [15] => ДЗ
    [16] => 3
    [17] => Психология личности
    [18] => 52
    [19] => 30
    [20] => 4
    [21] => 18
    [22] => З
    [23] => 4
}
Как найти вхождение в массив строки с названием раздела, затем добавлять этот элемент через каждые 7 'элементов до нового вхождения названия с названием раздела, а затем продолжить вставлять элемент со следующим названием раздела чтобы получился такой массив?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Array
(
    [0] => Нормативно-правовой раздел
    [1] => 1
    [2] => Основы законодательства
    [3] => 22
    [4] => 18
    [5] => 2
    [6] => 2
    [7] => З
    [8] => Раздел общепрофессиональных дисциплин
    [9] => 2
    [10] => Общая психология
    [11] => 60
    [12] => 36
    [13] => 4
    [14] => 20
    [15] => ДЗ
    [16] => Раздел общепрофессиональных дисциплин
    [17] => 3
    [18] => Психология личности
    [19] => 52
    [20] => 30
    [21] => 4
    [22] => 18
    [23] => З
    [24] => 4
    [25] => Раздел общепрофессиональных дисциплин
    [26] => 6
    [27] => Психофизиология
    [28] => 48
    [29] => 28
    [30] => 4
    [31] => 16
    [32] => ДЗ
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.02.2025, 16:47
Ответы с готовыми решениями:

Удалите из массива строки, содержащие максимальный элемент массива, а затем удвойте вхождение строк
Удалите из массива строки, содержащие максимальный элемент массива, а затем удвойте вхождение строк, содержащих минимальный элемент массива.

Подсчитать сумму элементов каждой строки и записать данные в новый массив. Найти максимальный элемент нового м
Подсчитать сумму элементов каждой строки и записать данные в новый массив. Найти максимальный элемент нового массива.

Как циклом добавлять в массив элемент?
Всем привет! Как циклом добавлять в массив элемент? В моем случае с помощью foreach <? $h='localhost'; $db='acon'; ...

2
 Аватар для andrey_f
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,705
14.02.2025, 10:55
Лучший ответ Сообщение было отмечено VIRTU123 как решение

Решение

попробуйте так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
$array = [
    "Нормативно-правовой раздел",
    1,
    "Основы законодательства",
    22,
    18,
    2,
    2,
    "З",
    "Раздел общепрофессиональных дисциплин",
    2,
    "Общая психология",
    60,
    36,
    4,
    20,
    "ДЗ",
    3,
    "Психология личности",
    52,
    30,
    4,
    18,
    "З",
    4
];
 
$insertedArray = [];
$sectionName = '';
$sectionCount = 0;
 
foreach ($array as $key => $value) {
    // Если находим название раздела
    if (preg_match('/Раздел/', $value)) {
        // Сохраняем текущее название раздела
        $sectionName = $value;
        // Сбрасываем счетчик
        $sectionCount = 0;
    }
    
    // Добавляем элемент в новый массив
    $insertedArray[] = $value;
 
    // Увеличиваем счетчик
    $sectionCount++;
 
    // Если текущий элемент не является названием раздела и счетчик равен 7, добавляем название раздела
    if ($sectionCount % 7 == 0 && $sectionName != '') {
        $insertedArray[] = $sectionName;
    }
}
 
// Если в конце массива остался раздел, добавляем его
if ($sectionName != '') {
    $insertedArray[] = $sectionName;
}
 
// Выводим результат
print_r($insertedArray);
1
0 / 0 / 0
Регистрация: 16.04.2021
Сообщений: 62
14.02.2025, 14:42  [ТС]
andrey_f, все работает

после строки
PHP
1
$insertedArray[] = $sectionName;
добавил
PHP
1
2
3
4
5
6
7
for ($i = 0; $i < count($resultArray); $i++) {
            if ($i && $resultArray[$i] == $resultArray[($i-1)]) {
               // echo 'есть идущие подряд: '.$resultArray[$i].' - '.$resultArray[$i].'<br>';
                unset($resultArray[$i-1]);
            }
            
        }
потому что запись нового элемента добавляется рядом с первым вхождением строки, тогда идут 2 повторяющиеся строки например
PHP
1
2
3
4
5
6
7
8
9
 [0] => Нормативно-правовой раздел
    [1] => 1
    [2] => Основы законодательства
    [3] => 22
    [4] => 18
    [6] => 2
    [7] => З
    [9] => Раздел общепрофессиональных дисциплин
   [10] => Раздел общепрофессиональных дисциплин
код выше убирает одну из записей

Добавлено через 6 минут
andrey_f, есть еще один эффект при найденном следующем вхождении строки с подстрокой 'Раздел' он добавляет запись там где не нужно
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 [49] => Раздел общепрофессиональных дисциплин
    [50] => 7
    [51] => Патопсихология
    [52] => 53
    [53] => 39
    [54] => 2
    [55] => 12
    [56] => ДЗ
    [57] => Раздел общепрофессиональных дисциплин
    [59] => Раздел специальных дисциплин
    [60] => 8
    [61] => Анатомия центральной нервной системы
    [62] => 52
    [63] => 32
    [64] => 4
    [65] => 16
    [66] => З
как убрать запись о предыдущем разделе при повторении операции с новым вхождением?

Добавлено через 1 час 28 минут
Надо заменить
PHP
1
2
3
4
            if ($i && $resultArray[$i] == $resultArray[($i-1)]) {
               // echo 'есть идущие подряд: '.$resultArray[$i].' - '.$resultArray[$i].'<br>';
                unset($resultArray[$i-1]);
            }
на
PHP
1
2
3
    if ($i && preg_match('/Раздел/', $resultArray[$i])){               
                if(!is_int($resultArray[$i+1])) unset($resultArray[$i]);                
    }
Находим название раздела, проверяем если следующий элемент не число, значит две строки с названием раздела идут подряд и нам надо удалить ту которая первая.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.02.2025, 14:42
Помогаю со студенческими работами здесь

Файлы нерабочие после создания нового раздела через Acronis
Случилось это после того как создал новый раздел для другой ос... многие файлы нерабочие (фото видео программы)... а если некоторые видео...

Найти минимальный элемент строки матрицы, затем минимальный элемент соответствующего столбца
Добрый день. Пришел к Вам за помощью. Дана матрица, заполненная элементами. Нужно найти минимальный элемент строки, затем найти минимальный...

Двумерный массив. Найти первый нечетный элемент его строку и столбец, затем найти максимальный и поменять их местами
Использовать указатели. Заполнить двумерный числовой массив Z целыми числами. Найти первый нечетный элемент массива и номер строки и...

Образовать новый массив С и найти наименьший элемент нового массива
Используя среду программирования выполнить задание. Даны два массива А и В по четыре элементов в каждом. Образовать новый массив С, где ...

Удалить из массива строки с максимальным элеменом, а затем удвоить вхождение строк с минимальным элементом
Удалите из массива строки, содержащие максимальный элемент массива, а затем удвойте вхождение строк, содержащих минимальный элемент массива.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru