0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 35

из многомерного массива получить строчку

30.03.2015, 17:18. Показов 2662. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

передо мной появилась одна задачка...а именно преобразовать многомерный массив в строку...

с рекурсией у меня не очень, но все же я попробовала написать такую функцию..она немного некорректно работает, подскажите в чем ошибка.

вот пример для сбора данных

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[passages] => SimpleXMLElement Object
                  (
                           [passage] => SimpleXMLElement Object
                                 (
                                           [hlword] => Array
                                                (
                                                        [0] => Вступить
                                                        [1] => в
                                                        [2] => СРО
                                                        [3] => изыскателей
                                                        [4] => Казани
                                                        [5] => СРО
                                                        [6] => Вступление
                                                        [7] => в
                                                        [8] => СРО
                                                        [9] => изыскателей
                                                )
                                 )
                    )
вот моя кривая функция =)

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function snippets($passages,$result)
    {
        foreach($passages as $key=>$val)
        {
            if($key==="passages")
            {
                $result.=$this->snippets($val,$result);
            }
            if($key==="passage")
            {
                $result.=$this->snippets($val,$result);
                $result.=(string)$val." ";
            }
        }
        return $result;
    }
Добавлено через 59 минут
сама нашла ошибку...)

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function snippets($passages)
    {
        foreach($passages as $key=>$val)
        {
            if($key==="passages")
            {
                $result.=$this->snippets($val);
            }
            if($key==="passage")
            {
                $result.=$this->snippets($val);
                $result.=(string)$val." ";
            }
        }
        return $result;
    }
мне не надо было передавать строчку для накопления несколько раз...))

но если кто видит и другие ошибки, прошу отписаться здесь...) критика и исправления принимаются, чтобы в дальнейшем таких ошибок не делать
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2015, 17:18
Ответы с готовыми решениями:

Как получить нужные значения из многомерного массива?
Всем привет! Есть массив такого типа: данные1 ( => ученик ( => 4 => Коля => 10а ...

Получить ключ элемента из многомерного массива
Есть многомерный массив такого вида: Array ( => Array ( => 140 => #708090 => S => 30 => 0 => 0 ) => Array ( =>...

Как получить ключи всех элементов определённого уровня ассоциативного многомерного массива?
Например, массив: Array( город1 => Array( склад1 => Array( яблоки => 45; бананы => 23; ) склад2 => Array( ...

8
120 / 34 / 9
Регистрация: 12.03.2015
Сообщений: 125
30.03.2015, 17:55
Зачем два раза проверять одно и то же условие?

PHP
1
if($key==="passages")
Можно перенести весь код в один блок, и убрать дублирующуюся строку

Добавлено через 6 минут
Вот такой вариант попробуйте:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
function snippets($passages)
    {
        foreach ($passages as $key=>$val)
        {
            if ($key==="passages")
            {
                $result = $this->snippets($val);
            } else {
                $result = implode ( " " , $val)
            }
        }
        return $result;
    }
0
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 35
30.03.2015, 17:56  [ТС]
TA1ex, там немного разные условия.

родительский объект имеет имя "passages", а дочерние "passage". в окончании разница

Добавлено через 31 секунду
TA1ex, сейчас попробую)
0
120 / 34 / 9
Регистрация: 12.03.2015
Сообщений: 125
30.03.2015, 17:58
Окончание не заметил. Тогда не пойдет

Вот так:


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
function snippets($passages)
    {
        foreach ($passages as $key=>$val)
        {
            if ( $key==="passages" OR $key==="passage" )
            {
                $result = $this->snippets($val);
            } else {
                $result = implode ( " " , $val)
            }
        }
        return $result;
    }
0
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 35
30.03.2015, 18:12  [ТС]
TA1ex, все равно проверю, мало ли) я в своей функции еще не учла объекты с hlword.

Добавлено через 12 минут
TA1ex, да...не сработал никак...

заметила еще одну особенность в этом xml...он не весь текст отображает в объектах

при обработке такого фрагмента на моем старом коде (на котором предложили не выдал ничего)

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[passages] => SimpleXMLElement Object
                                                        (
                                                            [passage] => SimpleXMLElement Object
                                                                (
                                                                    [hlword] => Array
                                                                        (
                                                                            [0] => СРО
                                                                            [1] => СРО
                                                                            [2] => строителей
                                                                            [3] => вступление
                                                                            [4] => в
                                                                            [5] => СРО
                                                                            [6] => строителей
                                                                            [7] => вступить
                                                                            [8] => в
                                                                            [9] => СРО
                                                                            [10] => строителей
                                                                        )
 
                                                                )
 
                                                        )
собрался вот такой текст

"в строительстве - что такое , чем выгодно РТ. Как РТ - какие документы нужны для получения строительных допусков. "
0
120 / 34 / 9
Регистрация: 12.03.2015
Сообщений: 125
30.03.2015, 18:43
Вот. Проверил только что. Именно на многомерном массиве работает

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
<?php
 
$passages = array(
    'passages' => array(
        'passage' => array(
            'hlword' => array(
                '0' => 'СРО',
                '1' => 'СРО',
                '2' => 'строителей',
                '3' => 'вступление',
                '4' => 'в',
                '5' => 'СРО',
                '6' => 'строителей',
                '7' => 'вступить',
                '8' => 'в',
                '9' => 'СРО',
                '10' => 'строителей'
            )
            
        )
        
    )
);
 
function snippets($passages)
{
    foreach ($passages as $key => $val) {
        if ($key === "passages" OR $key === "passage") {
            $result = snippets($val);
        } else {
            $result = implode(" ", $val);
        }
    }
    return $result;
}
 
echo snippets($passages);
Выдает:
Code
1
СРО СРО строителей вступление в СРО строителей вступить в СРО строителей
0
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 35
30.03.2015, 18:53  [ТС]
TA1ex, надо было мне уточнить.

тут не просто многомерный массив, а многомерный массив объектов.

для него не срабатывает функция implode.

я решила свою проблему. перед преобразованием файла в xml удалила теги <hlword>,</hlword>.
дальше уже правильно сработала моя функция

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function snippets($passages)
    {
        foreach($passages as $key=>$val)
        {
            if($key==="passages")
            {
                $result.=$this->snippets($val);
            }
            if($key==="passage")
            {
                $result.=$this->snippets($val);
                $result.=(string)$val." ";
            }
        }
        return $result;
0
120 / 34 / 9
Регистрация: 12.03.2015
Сообщений: 125
30.03.2015, 18:55
Цитата Сообщение от RinaFolk Посмотреть сообщение
тут не просто многомерный массив, а многомерный массив объектов.
для него не срабатывает функция implode.
implode используется для последнего элемента. А он то как раз у вас Array

А вообще, вам нужно это: xml_parse_into_struct
Парсите в ассоциативный массив. А дальше проще простого
0
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 35
31.03.2015, 10:42  [ТС]
TA1ex, я использовала simplexml_load_string
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2015, 10:42
Помогаю со студенческими работами здесь

Получить переменную из многомерного JSON переданного пост запросом
Доброго времени суток! Отправляю данные методом POST через $.ajax Отправляю такой JSON массив: { &quot;hit&quot;:{ ...

Вывод многомерного массива
Доброго времени суток, впал в ступор с выводом массива, нужно создать из него (имеющегося массива) меню. Чтобы значение ключа Link попадало...

Перемешивания многомерного массива
Здравствуйте, господа! Перемешать обычный массив просто. А как быть с более сложными? Например: array('1' =&gt; array('1.0', '1.1',...

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

Перебор Многомерного массива
Уважаемые помогите перебрать многомерный массив if($qrand1){ if(mysql_num_rows($qrand1)&gt;0){ $data=array(); ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru