Подскажите, пожалуйста, как удалить определенные ветки массива по шаблону $list[Школа 11][Класс 11][Класс 11А]="54654.doc"; $list[Школа 10][Класс 9]{Класс 9А}="56.doc"; $list[Школа 9][Класс 3][Класс 3А]="434.doc"; $list[Школа 9][Класс 3][Класс 3Б]="564.doc"; $list[Школа 10][Класс 5][Класс 5Е]="454.doc"; $list[Школа 11][Класс 5]="454.doc"; И есть шаблон на удаление $list_original[Школа 9][Класс 3]=0; $list_original[Школа 10][Класс 5]=0; $list_original[Школа 11]=0; Как удалить в начальном списке ветки массива согласно шаблону? Массив multidimensional. "Проредить" иногда надо и начиная с первого ключа и заканчивая последним уровнем, согласно шаблону.
Re: Как убить определенные ветки многомерного массива по шаб unset($list_original['Школа 9']['Класс 3']);
Re: Как убить определенные ветки многомерного массива по шаб Удалить ключи нужно не в лист оригинал, а в листе. В лист ориджинал находятся образцы по которым удалять. Просто мне непонятно, как мне эти ключи с файла образца перенести для unset в файл для удаления Ветви массива разной длинны, нельзя предсказать как-то количество ключей, потом куда эти ключи сохранить в отдельные переменные? Без образца функции мне сложно понять, что нужно сделать
Re: Как убить определенные ветки многомерного массива по шаб Называется рекурсия. В данном случае вам нужно удалить только последнее звено, или все? И можете показать на примере исходные данные, что надо удалить и как должно выглядеть после этого?
Re: Как убить определенные ветки многомерного массива по шаб рекурсивно итерировать. если на входном ноль и на выходном есть такой путь - удалять путь.
Re: Как убить определенные ветки многомерного массива по шаб Исходные данные находятся в моем самом первом посте. 1. Массив для обработки. 2. Массив - образец, который содержит те "ветки" многомерного массива, которые нужно удалить. Эти ветки не одинаковые. Где-то нужно удалить массив начиная со второго "по глубине" ключа, где-то надо удалить самый последний ключ. То есть где-то может понадобится удалить всю школу, а где-то только класс 3А. Что именно нужно удаляить - содержится во втором массиве. Значения 0 в конце - просто для того, чтобы сформировать сам массив. Нельзя просто взять и удалить скажем класс 3А, потому что класс 3А может принадлежать разным школам, нужно удалить именно третий класс школы номер девять. То есть удалять до той глубины, которая указана в файле образце А в конце должно остаться $list[Школа 11][Класс 11][Класс 11А]="54654.doc"; $list[Школа 10][Класс 9]{Класс 9А}="56.doc"; $list[Школа 9][Класс 3][Класс 3А]="434.doc"; $list[Школа 9][Класс 3][Класс 3Б]="564.doc"; $list[Школа 10][Класс 5][Класс 5Е]="454.doc"; $list[Школа 11][Класс 5]="454.doc"; И есть шаблон на удаление $list_original[Школа 9][Класс 3]=0; $list_original[Школа 10][Класс 5]=0; $list_original[Школа 11]=0; $list[Школа 10][Класс 9]{Класс 9А}="56.doc"; потому что все остальные были удалены по шаблону осталась $list[Школа 9] - но у нее нет значений, только сам ключ Добавлено спустя 1 минуту 45 секунд: Re: Как убить определенные ветки многомерного массива по шаблону можно ли показать пример, хотя бы с одним ключом? Сложно понять суть кода, опыт у меня очень небольшой
Код (PHP): <?php //////////////////////////////////////////////////////////////////////////////// // ИСХОДНОЕ ДЕРЕВО И ЕГО СУДЬБА // удаляется третьим правилом от школы и ниже $list['Школа 11']['Класс 11']['Класс 11А']="54654.doc"; // остается $list['Школа 10']['Класс 9']['Класс 9А']="56.doc"; // удаляется первым правилом от класса и ниже $list['Школа 9']['Класс 3']['Класс 3А']="434.doc"; // удаляется первым правилом от класса и ниже $list['Школа 9']['Класс 3']['Класс 3Б']="564.doc"; // ветка Школы 9 также удаляется ибо опустевает // удаляется вторым правилом от класса и ниже $list['Школа 10']['Класс 5']['Класс 5Е']="454.doc"; // удаляется третьим правилом от школы и ниже $list['Школа 11']['Класс 5']="454.doc"; //////////////////////////////////////////////////////////////////////////////// // МОДИФИКАТОР ДЕРЕВА // удаляет 3 и 4 строки а так же удаляет всю Школу9 ибо в ней не остается записей $list_original['Школа 9']['Класс 3']=0; // удаляет строку 5 $list_original['Школа 10']['Класс 5']=0; // удаляется строки 1 и 6 то есть всю Школу11 $list_original['Школа 11']=0; //////////////////////////////////////////////////////////////////////////////// // НА ВЫХОДЕ ОЖИДАЕМ // $list['Школа 10']['Класс 9']['Класс 9А']="56.doc"; //////////////////////////////////////////////////////////////////////////////// // ФУНКЦИЯ // один обязательный аргумент для циклического уничтожения пустых веток // один необязательный аргумент для изначального слияния исходного дерева и дровосеков function cut ($input, $cutter = null) { // если дан второй массив if (is_array($cutter)) { // заменяем все элементы первого массива соответствующими элементами второго массива $input = array_replace_recursive($input, $cutter); } // итерируем текущую ветку дерева foreach ($input as $k => &$value) { // у нас тут массив if (is_array($value)) { // изучим его рекурсивным вызовом $value = cut($value); } // если в итоге у нас пустое значение (ноль или пустой массив)... if (empty($value)) { // удалим такой ключ из текущей ветки unset($input[$k]); } } // вернем результат работы return $input; } //////////////////////////////////////////////////////////////////////////////// // ЗАПУСК И РЕЗУЛЬТАТЫ print_r(cut($list, $list_original)); /* Array ( [Школа 10] => Array ( [Класс 9] => Array ( [Класс 9А] => 56.doc ) ) ) */ // ЭТО ОЖИДАННЫЙ РЕЗУЛЬТАТ В РАМКАХ ПРЕДОСТАВЛЕННЫХ ВХОДНЫХ ДАННЫХ //////////////////////////////////////////////////////////////////////////////// // БРОСАЙ ПРОГРАММИРОВАНИЕ - ТЫ НЕ ВИДИШЬ АЛГОРИТМОВ. Добавлено спустя 1 минуту 34 секунды: Re: Как убить определенные ветки многомерного массива по шаблону Сурикат, перенеси плиз тред в ветку для ленивых - тут ноль рвения у человека вощемта
Re: Как убить определенные ветки многомерного массива по шаб Грустно. Сессия щас чтоль, или чего там еще может быть? Сыпятся прям горстями с академическими задачками, при нулевом скиле и таком же понимании происходящего. Done.
Re: Как убить определенные ветки многомерного массива по шаб ну похоже да. была бы хотя бы какая-то попытка. а то дай и всё тут. мерси
Re: Как убить определенные ветки многомерного массива по шаб Благодарю за помощь, Ганзал! Я взял функцию поиска и удаления значения массива вызовом самой себя и переделал ее под удаления ключа массива, вроде тоже работает. Всего тебе наилучшего!