Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 944

Как переделать формат текста в дерево json

27.08.2022, 08:23. Показов 1535. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как переделать формат текста в дерево json например вот этот участок кода формирует текстовый файл

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
if ( isset($_POST["submit"]) ) {
 
   if ( isset($_FILES["file"])) {
 
            //if there was an error uploading the file
        if ($_FILES["file"]["error"] > 0) {
            echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
 
        }
        else {
                 //Print file details
             echo "Upload: " . $_FILES["file"]["name"] . "<br />";
             echo "Type: " . $_FILES["file"]["type"] . "<br />";
             echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
             echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
 
                 //if file already exists
             if (file_exists("upload/" . $_FILES["file"]["name"])) {
            echo $_FILES["file"]["name"] . " already exists. ";
             }
             else {
                    //Store file in directory "upload" with the name of "uploaded_file.txt"
            $storagename = "uploaded_file.txt";
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $storagename);
            echo "Stored in: " . "upload/" . $_FILES["file"]["name"] . "<br />";
            }
        }
     } else {
             echo "No file selected <br />";
     }
}
и как в таком случае этот формат переделать из вида

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"Item Name";"Type";"Parent";"Relation"
"Total";"Изделия и компоненты";;
"ПВЛ";"Изделия и компоненты";"Total";
"Стандарт.#1";"Варианты комплектации";"ПВЛ";
"Тележка Б25.#2";"Прямые компоненты";"Стандарт.#1";"Тележка Б25"
"Комплект СВЛ стд+надпятник.#3";"Прямые компоненты";"Стандарт.#1";"Комплект СВЛ стд+надпятник"
"ПВЛ соч";"Изделия и компоненты";"Total";
"ПВЛ 103м Б27";"Изделия и компоненты";"Total";
"ХОП";"Изделия и компоненты";"Total";
"ХОП 101";"Изделия и компоненты";"Total";
"Стандарт.#101";"Варианты комплектации";"ХОП 101";
"Тележка Б25.#205";"Прямые компоненты";"Стандарт.#101";"Тележка Б25"
"Комплект СВЛ с УЗ01К.#206";"Прямые компоненты";"Стандарт.#101";"Комплект СВЛ с УЗ01К"
"ХОП 120";"Изделия и компоненты";"Total";
"Стандарт.#102";"Варианты комплектации";"ХОП 120";
"Тележка МК25.#207";"Прямые компоненты";"Стандарт.#102";"Тележка МК25"
"Комплект СВЛ с УЗ01К.#208";"Прямые компоненты";"Стандарт.#102";"Комплект СВЛ с УЗ01К"
"ХМВ 160м Б25";"Изделия и компоненты";"Total";
"ПЛ 80";"Изделия и компоненты";"Total";
или вида

Code
1
[{"Item Name;\"Type\";\"Parent\";\"Relation\"":"Total;\"Изделия и компоненты\";;"},{"Item Name;\"Type\";\"Parent\";\"Relation\"":"ПВЛ;\"Изделия и компоненты\";\"Total\";"},{"Item Name;\"Type\";\"Parent\";\"Relation\"":"Стандарт.#1;\"Варианты комплектации\";\"ПВЛ\";"},{"Item Name;\"Type\";\"Parent\";\"Relation\"":"Тележка Б25.#2;\"Прямые компоненты\";\"Стандарт.#1\";\"Тележка Б25\""},{"Item Name;\"Type\";\"Parent\";\"Relation\"":"Комплект СВЛ стд+надпятник.#3;\"Прямые компоненты\";\"Стандарт.#1\";\"Комплект СВЛ стд+надпятник\""},{"Item Name;\"Type\";\"Parent\";\"Relation\"":"ПВЛ соч;\"Изделия и компоненты\";\"Total\";"},{"Item Name;\"Type\";\"Parent\";\"Relation\"":"ПВЛ 103м Б27;\"Изделия и компоненты\";\"Total\";"},{"
и вида

Code
1
2
3
4
5
6
7
8
9
10
 Item Name=Тележка Б25.#2 ; Type=Прямые компоненты ; channel= ; Parent=Стандарт.#1 ; Relation=Тележка Б25 >>
 
 
 Item Name=Комплект СВЛ стд+надпятник.#3 ; Type=Прямые компоненты ; channel= ; Parent=Стандарт.#1 ; Relation=Комплект СВЛ стд+надпятник >>
 
 
 Item Name=ПВЛ соч ; Type=Изделия и компоненты ; channel= ; Parent=Total ; Relation= >>
 
 
 Item Name=ПВЛ 103м Б27 ; Type=Изделия и компоненты ; channel= ; Parent=Total ; Relation= >>
в дерево зависимостей вида

Code
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
[
  {
    "itemName": "Total",
    "parent": null,
    "children": [
      {
        "itemName": "ПВЛ",
        "parent": "Total",
        "children": [
          {
            "itemName": "Стандарт.#1",
            "parent": "ПВЛ",
            "children": [
              {
                "itemName": "Тележка Б25.#2",
                "parent": "Стандарт.#1",
                "children": [
                  {
                    "itemName": "Стандарт.#5",
                    "parent": "Тележка Б25.#2",
                    "children": [
                      {
                        "itemName": "РБ ЦДЛР.9855.00.02.000.#17",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "БН ЦДЛР.9855.00.01.000.#18",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Колесная пара 25 т.#19",
                        "parent": "Стандарт.#5",
                        "children": [
                          {
                            "itemName": "Стандарт.#10",
                            "parent": "Колесная пара 25 т.#19",
                            "children": [
                              {
                                "itemName": "Колесо 25т.#52",
                                "parent": "Стандарт.#10",
                                "children": []
                              },
                              {
                                "itemName": "Ось 25т.#53",
                                "parent": "Стандарт.#10",
                                "children": []
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "itemName": "Пружина 9855.00.00.001.#20",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.00.002.#21",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.00.003.#22",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.00.004.#23",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.03.003.#24",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.03.004.#221",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Скользун ЦДЛР 9855.00.03.000.#220",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Адаптер подшипника 4536-07.00.00.001.#219",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Клин 4536-07.00.00.003.#218",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Клин 4536-07.00.00.003-01.#25",
                        "parent": "Стандарт.#5",
                        "children": []
                      }
                    ]
                  },
                  {
                    "itemName": "Доп1.#108",
                    "parent": "Тележка Б25.#2",
                    "children": [
                      {
                        "itemName": "РБ 4536-07.00.02.000.#226",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "БН 4701-09.00.01.000.#227",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Колесная пара 25 т.#228",
                        "parent": "Доп1.#108",
                        "children": [
                          {
                            "itemName": "Стандарт.#10",
                            "parent": "Колесная пара 25 т.#228",
                            "children": [
                              {
                                "itemName": "Колесо 25т.#52",
                                "parent": "Стандарт.#10",
                                "children": []
                              },
                              {
                                "itemName": "Ось 25т.#53",
                                "parent": "Стандарт.#10",
                                "children": []
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.004-02.#229",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.005-02.#230",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.006-02.#231",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.007-02.#232",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.03.003.#233",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.03.004.#234",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Скользун ЦДЛР 9855.00.03.000.#235",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Адаптер подшипника 4536-07.00.00.001.#236",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Клин 4536-07.00.00.003.#237",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Клин 4536-07.00.00.003-01.#238",
                        "parent": "Доп1.#108",
                        "children": []
                      }
                    ]
                  },
                  {
                    "itemName": "Доп2.#6",
                    "parent": "Тележка Б25.#2",
                    "children": [
                      {
                        "itemName": "РБ 4536-07.00.02.000.#26",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "БН 4701-09.00.01.000.#27",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Колесная пара 25 т.#28",
                        "parent": "Доп2.#6",
                        "children": [
                          {
                            "itemName": "Стандарт.#10",
                            "parent": "Колесная пара 25 т.#28",
                            "children": [
                              {
                                "itemName": "Колесо 25т.#52",
                                "parent": "Стандарт.#10",
                                "children": []
                              },
                              {
                                "itemName": "Ось 25т.#53",
                                "parent": "Стандарт.#10",
                                "children": []
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.004-02.#29",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.005-02.#30",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.006-02.#31",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.007-02.#32",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.03.003-02.#33",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.03.010-02.#225",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Скользун 4536-07.00.03.000.#224",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Адаптер подшипника 4536-07.00.00.001.#223",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Клин 4536-07.00.00.003.#222",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Клин 4536-07.00.00.003-01.#34",
                        "parent": "Доп2.#6",
                        "children": []
                      }
                    ]
                  }
                ]
              }
может сразу сформировать такое дерево в участке кода номер один что в начале этого сообщения?
Пришлите пример кода как решение
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.08.2022, 08:23
Ответы с готовыми решениями:

как преобразовать js в json формат?
я с помощью php парсера выдёргиваю js код из страницы html { router: { routes: routes, routesDictionary:...

Как импортировать куки в формат json?
Как импортировать куки в формат json? Прошу извинить меня за теги.

Представить дерево каталогов как JSON
Есть ли простой способ сгенерировать такой JSON? Как должно быть: { &quot;Food&quot;: , &quot;Football&quot;: } Как есть: ...

18
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 944
29.08.2022, 11:13  [ТС]
Есть ли возможность в php делать это иерархическое дерево?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
30.08.2022, 09:55
Пример для первого варианта (CSV).
Читаем файл:
PHP
1
2
3
4
5
6
7
8
9
$rows = [];
 
$resource = fopen(__DIR__ . '/input.csv', 'r');
        
while ($row = fgetcsv($resource, separator: ';')) {
    $rows[] = $row;
}
 
unset($rows[0]);
Преобразуем:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$output = [];
$rows   = array_reverse($rows);
 
foreach ($rows as [0 => $name, 2 => $parent]) {
    $output[$name]['itemName'] = $name;
    $output[$name]['parent']   = $parent;
 
    if ('' !== $parent) {
        $output[$parent]['children'][] = $output[$name];
        
        unset($output[$name]);
    }
}
 
$output = array_values($output);
 
echo json_encode($output);
Так как приведённый выше код напрямую впихивать в ваш код нельзя, набросал ООП-решение.

Чтение из CSV-файла. Для JSON и того, третьего варианта создайте классы-читалки по аналогии с CsvReader.
Reader
PHP
1
2
3
4
interface Reader
{
    public function read(): array;
}

FileReader
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
abstract class FileReader implements Reader
{
    protected $resource;
    
    public function __construct(string $filename)
    {
        if (!is_readable($filename)) {
            throw new \RuntimeException('File is not readable.');
        }
        
        $this->resource = fopen($filename, 'r');
    }
 
    public function __destruct()
    {
        fclose($this->resource);
    }
    
    abstract public function read(): array;
}

CsvReader
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class CsvReader extends FileReader
{   
    public function read(): array
    {
        $output = [];
        
        while ($row = fgetcsv($this->resource, separator: ';')) {
            $output[] = $row;
        }
        
        unset($output[0]);
        
        return $output;
    }
}

Transformer
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
class Transformer
{
    public function __construct(private Reader $reader)
    {   
    }
    
    public function transform()
    {
        $output = [];
        $rows   = array_reverse($this->reader->read());
 
        foreach ($rows as [0 => $name, 2 => $parent]) {
            $output[$name]['itemName'] = $name;
            $output[$name]['parent']   = $parent;
 
            if ('' !== $parent) {
                $output[$parent]['children'][] = $output[$name];
                
                unset($output[$name]);
            }
        }
        
        return $output;
    }
}

Использовать так:
PHP
1
2
3
4
5
$transformer = new Transformer(
    new CsvReader(__DIR__ . '/input.csv')
);
 
echo json_encode($transformer->transform());
Вместо
PHP
1
new CsvReader(__DIR__ . '/input.csv')
в Transformer передавайте нужный объект-читалку, в зависимости от типа файла (для этого можно использовать фабрику).[/PHP]
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 944
30.08.2022, 10:26  [ТС]
Да это поятно что ООП решение будет - но как именно иерархию выстроить как в

Code
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
[
  {
    "itemName": "Total",
    "parent": null,
    "children": [
      {
        "itemName": "ПВЛ",
        "parent": "Total",
        "children": [
          {
            "itemName": "Стандарт.#1",
            "parent": "ПВЛ",
            "children": [
              {
                "itemName": "Тележка Б25.#2",
                "parent": "Стандарт.#1",
                "children": [
                  {
                    "itemName": "Стандарт.#5",
                    "parent": "Тележка Б25.#2",
                    "children": [
                      {
                        "itemName": "РБ ЦДЛР.9855.00.02.000.#17",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "БН ЦДЛР.9855.00.01.000.#18",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Колесная пара 25 т.#19",
                        "parent": "Стандарт.#5",
                        "children": [
                          {
                            "itemName": "Стандарт.#10",
                            "parent": "Колесная пара 25 т.#19",
                            "children": [
                              {
                                "itemName": "Колесо 25т.#52",
                                "parent": "Стандарт.#10",
                                "children": []
                              },
                              {
                                "itemName": "Ось 25т.#53",
                                "parent": "Стандарт.#10",
                                "children": []
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "itemName": "Пружина 9855.00.00.001.#20",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.00.002.#21",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.00.003.#22",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.00.004.#23",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.03.003.#24",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.03.004.#221",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Скользун ЦДЛР 9855.00.03.000.#220",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Адаптер подшипника 4536-07.00.00.001.#219",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Клин 4536-07.00.00.003.#218",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Клин 4536-07.00.00.003-01.#25",
                        "parent": "Стандарт.#5",
                        "children": []
                      }
                    ]
                  },
                  {
                    "itemName": "Доп1.#108",
                    "parent": "Тележка Б25.#2",
                    "children": [
                      {
                        "itemName": "РБ 4536-07.00.02.000.#226",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "БН 4701-09.00.01.000.#227",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Колесная пара 25 т.#228",
                        "parent": "Доп1.#108",
                        "children": [
                          {
                            "itemName": "Стандарт.#10",
                            "parent": "Колесная пара 25 т.#228",
                            "children": [
                              {
                                "itemName": "Колесо 25т.#52",
                                "parent": "Стандарт.#10",
                                "children": []
                              },
                              {
                                "itemName": "Ось 25т.#53",
                                "parent": "Стандарт.#10",
                                "children": []
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.004-02.#229",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.005-02.#230",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.006-02.#231",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.007-02.#232",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.03.003.#233",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 9855.00.03.004.#234",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Скользун ЦДЛР 9855.00.03.000.#235",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Адаптер подшипника 4536-07.00.00.001.#236",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Клин 4536-07.00.00.003.#237",
                        "parent": "Доп1.#108",
                        "children": []
                      },
                      {
                        "itemName": "Клин 4536-07.00.00.003-01.#238",
                        "parent": "Доп1.#108",
                        "children": []
                      }
                    ]
                  },
                  {
                    "itemName": "Доп2.#6",
                    "parent": "Тележка Б25.#2",
                    "children": [
                      {
                        "itemName": "РБ 4536-07.00.02.000.#26",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "БН 4701-09.00.01.000.#27",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Колесная пара 25 т.#28",
                        "parent": "Доп2.#6",
                        "children": [
                          {
                            "itemName": "Стандарт.#10",
                            "parent": "Колесная пара 25 т.#28",
                            "children": [
                              {
                                "itemName": "Колесо 25т.#52",
                                "parent": "Стандарт.#10",
                                "children": []
                              },
                              {
                                "itemName": "Ось 25т.#53",
                                "parent": "Стандарт.#10",
                                "children": []
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.004-02.#29",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.005-02.#30",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.006-02.#31",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.00.007-02.#32",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.03.003-02.#33",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Пружина 4536-07.00.03.010-02.#225",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Скользун 4536-07.00.03.000.#224",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Адаптер подшипника 4536-07.00.00.001.#223",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Клин 4536-07.00.00.003.#222",
                        "parent": "Доп2.#6",
                        "children": []
                      },
                      {
                        "itemName": "Клин 4536-07.00.00.003-01.#34",
                        "parent": "Доп2.#6",
                        "children": []
                      }
                    ]
                  }
                ]
              }
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
30.08.2022, 10:52
Dorofej, вот этот кусок как раз и строит такой массив:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$output = [];
$rows   = array_reverse($rows);
 
foreach ($rows as [0 => $name, 2 => $parent]) {
    $output[$name]['itemName'] = $name;
    $output[$name]['parent']   = $parent;
 
    if ('' !== $parent) {
        $output[$parent]['children'][] = $output[$name];
        
        unset($output[$name]);
    }
}
 
$output = array_values($output);
 
echo json_encode($output);
Попробуйте запустить его где-нибудь отдельно от вашего кода и посмотрите. Пример (заменил чтение из файла прямой подстановкой CSV, для наглядности):
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
$csv = '"Item Name";"Type";"Parent";"Relation"
"Total";"Изделия и компоненты";;
"ПВЛ";"Изделия и компоненты";"Total";
"Стандарт.#1";"Варианты комплектации";"ПВЛ";
"Тележка Б25.#2";"Прямые компоненты";"Стандарт.#1";"Тележка Б25"
"Комплект СВЛ стд+надпятник.#3";"Прямые компоненты";"Стандарт.#1";"Комплект СВЛ стд+надпятник"
"ПВЛ соч";"Изделия и компоненты";"Total";
"ПВЛ 103м Б27";"Изделия и компоненты";"Total";
"ХОП";"Изделия и компоненты";"Total";
"ХОП 101";"Изделия и компоненты";"Total";
"Стандарт.#101";"Варианты комплектации";"ХОП 101";
"Тележка Б25.#205";"Прямые компоненты";"Стандарт.#101";"Тележка Б25"
"Комплект СВЛ с УЗ01К.#206";"Прямые компоненты";"Стандарт.#101";"Комплект СВЛ с УЗ01К"
"ХОП 120";"Изделия и компоненты";"Total";
"Стандарт.#102";"Варианты комплектации";"ХОП 120";
"Тележка МК25.#207";"Прямые компоненты";"Стандарт.#102";"Тележка МК25"
"Комплект СВЛ с УЗ01К.#208";"Прямые компоненты";"Стандарт.#102";"Комплект СВЛ с УЗ01К"
"ХМВ 160м Б25";"Изделия и компоненты";"Total";
"ПЛ 80";"Изделия и компоненты";"Total";';
 
$rows = array_map(function($row) {
    return str_getcsv($row, ';');
}, explode("\n", $csv));
 
// Убираем заголовки
unset($rows[0]);
 
$output = [];
$rows   = array_reverse($rows);
 
foreach ($rows as [0 => $name, 2 => $parent]) {
    $output[$name]['itemName'] = $name;
    $output[$name]['parent']   = $parent;
 
    if ('' !== $parent) {
        $output[$parent]['children'][] = $output[$name];
        
        unset($output[$name]);
    }
}
 
$output = array_values($output);
 
echo json_encode($output);
Выводит:
JavaScript
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
[
  {
    "children": [
      {
        "itemName": "ПЛ 80",
        "parent": "Total"
      },
      {
        "itemName": "ХМВ 160м Б25",
        "parent": "Total"
      },
      {
        "children": [
          {
            "children": [
              {
                "itemName": "Комплект СВЛ с УЗ01К.#208",
                "parent": "Стандарт.#102"
              },
              {
                "itemName": "Тележка МК25.#207",
                "parent": "Стандарт.#102"
              }
            ],
            "itemName": "Стандарт.#102",
            "parent": "ХОП 120"
          }
        ],
        "itemName": "ХОП 120",
        "parent": "Total"
      },
      {
        "children": [
          {
            "children": [
              {
                "itemName": "Комплект СВЛ с УЗ01К.#206",
                "parent": "Стандарт.#101"
              },
              {
                "itemName": "Тележка Б25.#205",
                "parent": "Стандарт.#101"
              }
            ],
            "itemName": "Стандарт.#101",
            "parent": "ХОП 101"
          }
        ],
        "itemName": "ХОП 101",
        "parent": "Total"
      },
      {
        "itemName": "ХОП",
        "parent": "Total"
      },
      {
        "itemName": "ПВЛ 103м Б27",
        "parent": "Total"
      },
      {
        "itemName": "ПВЛ соч",
        "parent": "Total"
      },
      {
        "children": [
          {
            "children": [
              {
                "itemName": "Комплект СВЛ стд+надпятник.#3",
                "parent": "Стандарт.#1"
              },
              {
                "itemName": "Тележка Б25.#2",
                "parent": "Стандарт.#1"
              }
            ],
            "itemName": "Стандарт.#1",
            "parent": "ПВЛ"
          }
        ],
        "itemName": "ПВЛ",
        "parent": "Total"
      }
    ],
    "itemName": "Total",
    "parent": ""
  }
]
Только порядок childen, itemName и parent не такой, как у вас. Но это роли не играет.
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 944
30.08.2022, 16:42  [ТС]
минуту сейчас прорверю отпишу

Добавлено через 2 часа 40 минут
хотите сказать что
PHP
1
2
3
4
$output = [];
$rows   = array_reverse($rows);
 
foreach ($rows as [0 => $name, 2 => $parent])
и именно участок foreach ($rows as [0 => $name, 2 => $parent])
связывает $rows с $output ? Это первый вопрос - тогда второй вопрос
а сам $rows - это fgetcsv($fp, 0, ";") а $fp - это fopen(__DIR__ .'\upload\uploaded_file.txt', "r") ? Тогда сразу третий вопрос где в скрипте связь $rows и $csv (если бы массив константно определялся) - не на участке же
PHP
1
2
3
$rows = array_map(function($row) {
    return str_getcsv($row, ';');
}, explode("\n", $csv));
так как explode - Разбивает строку с помощью разделителя Описание array explode ( string $delimiter , string $string )

Добавлено через 7 минут
В итоге при работе кода
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$data = array_map(function($row) {
    return str_getcsv($row, ';');
}, explode("\n", $fp));
 
// Убираем заголовки
//unset($data[0]);
 
$output = [];
$data   = array_reverse($data);
 
foreach ($data as [0 => $name, 2 => $parent]) {
    $output[$name]['itemName'] = $name;
    $output[$name]['parent']   = $parent;
 
    if ('' !== $parent) {
        $output[$parent]['children'][] = $output[$name];
        
      //  unset($output[$name]);
    }
}
выводится пустой массив так как $output[ где то не подцыпает $data -- а $data не подципает $fp
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
30.08.2022, 17:33
Цитата Сообщение от Dorofej Посмотреть сообщение
участок foreach ($rows as [0 => $name, 2 => $parent])
связывает $rows с $output ?
Ну да, тут из $rows берутся первый и третий элементы, которые далее записываются в $output.
Цитата Сообщение от Dorofej Посмотреть сообщение
а сам $rows - это fgetcsv($fp, 0, ";") а $fp - это fopen(__DIR__ .'\upload\uploaded_file.txt', "r")
$rows заполняется в цикле. На каждой итерации fgetcsv считывает по одной строке из файла. Строка разбирается и пишется в $rows.
Цитата Сообщение от Dorofej Посмотреть сообщение
где в скрипте связь $rows и $csv (если бы массив константно определялся) - не на участке же
Именно на этом участке. $csv разбивается построчно и передаётся в array_map.
Цитата Сообщение от Dorofej Посмотреть сообщение
выводится пустой массив
Зачем вы в explode передали ресурс файла ($fp)?

Я же показал в моём первом сообщении, как считать файл. А этот кусок добавил позже, чтобы разобрать строку:
PHP
1
2
3
$rows = array_map(function($row) {
    return str_getcsv($row, ';');
}, explode("\n", $csv));
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 944
30.08.2022, 17:41  [ТС]
Я передал в explode("\n", $fp)); лишь потому что у меня нет такого константного массива
Code
1
2
3
4
5
6
7
8
$csv = '"Item Name";"Type";"Parent";"Relation"
"Total";"Изделия и компоненты";;
"ПВЛ";"Изделия и компоненты";"Total";
"Стандарт.#1";"Варианты комплектации";"ПВЛ";
"Тележка Б25.#2";"Прямые компоненты";"Стандарт.#1";"Тележка Б25"
"Комплект СВЛ стд+надпятник.#3";"Прямые компоненты";"Стандарт.#1";"Комплект СВЛ стд+надпятник"
"ПВЛ соч";"Изделия и компоненты";"Total";
"ПВЛ 103м Б27";"Изделия и компоненты";"Total";
(это уже ваша задумка) у меня массив извлекается из пути ($fp = fopen(__DIR__ .'\upload\uploaded_file.txt', "r")) или в explode передать переменную fgetcsv($fp, 0, ";") ?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
30.08.2022, 18:00
Самый первый же кусок кода, который я привёл в этой теме:
PHP
1
2
3
4
5
6
7
8
9
$rows = [];
 
$resource = fopen(__DIR__ . '/input.csv', 'r');
        
while ($row = fgetcsv($resource, separator: ';')) {
    $rows[] = $row;
}
 
unset($rows[0]);
Он формирует $rows из файла. Не надо ничего своего придумывать.
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 944
30.08.2022, 19:27  [ТС]
хорошо а что вместо тогда $csv ставить раз то ваш искусственный массив (причем константный типа)

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$csv = '"Item Name";"Type";"Parent";"Relation"
"Total";"Изделия и компоненты";;
"ПВЛ";"Изделия и компоненты";"Total";
"Стандарт.#1";"Варианты комплектации";"ПВЛ";
"Тележка Б25.#2";"Прямые компоненты";"Стандарт.#1";"Тележка Б25"
"Комплект СВЛ стд+надпятник.#3";"Прямые компоненты";"Стандарт.#1";"Комплект СВЛ стд+надпятник"
"ПВЛ соч";"Изделия и компоненты";"Total";
"ПВЛ 103м Б27";"Изделия и компоненты";"Total";
"ХОП";"Изделия и компоненты";"Total";
"ХОП 101";"Изделия и компоненты";"Total";
"Стандарт.#101";"Варианты комплектации";"ХОП 101";
"Тележка Б25.#205";"Прямые компоненты";"Стандарт.#101";"Тележка Б25"
"Комплект СВЛ с УЗ01К.#206";"Прямые компоненты";"Стандарт.#101";"Комплект СВЛ с УЗ01К"
"ХОП 120";"Изделия и компоненты";"Total";
"Стандарт.#102";"Варианты комплектации";"ХОП 120";
"Тележка МК25.#207";"Прямые компоненты";"Стандарт.#102";"Тележка МК25"
"Комплект СВЛ с УЗ01К.#208";"Прямые компоненты";"Стандарт.#102";"Комплект СВЛ с УЗ01К"
"ХМВ 160м Б25";"Изделия и компоненты";"Total";
"ПЛ 80";"Изделия и компоненты";"Total";';
если у меня ничего такого как он нет в коде?

Добавлено через 47 секунд
имеется в вот этот участок
PHP
1
2
3
$rows = array_map(function($row) {
    return str_getcsv($row, ';');
}, explode("\n", $csv));
?

Добавлено через 18 минут
Тот предидущий был вопрос - номер первый?

А вот второй в итоге сделал код

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
$rows = [];
 
$resource = fopen(__DIR__ .'\upload\uploaded_file.txt', "r");
        
while ($row = fgetcsv($resource, 0, ";")) {
    $rows[] = $row;
}
 
 $rows = array_map(function($row) {
    return str_getcsv($row, ';');
}, explode("\n", $csv));
 
// Убираем заголовки
//unset($data[0]);
unset($rows[0]);
$output = [];
$rows   = array_reverse($rows);
 
foreach ($rows as [0 => $name, 2 => $parent]) {
    $output[$name]['itemName'] = $name;
    $output[$name]['parent']   = $parent;
 
    if ('' !== $parent) {
        $output[$parent]['children'][] = $output[$name];
        
        unset($output[$name]);
    }
}
 
$output = array_values($output);
 
echo json_encode($output);
но опять вывелся пустой массив? вывелось только то что было в предидущем скрипте

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
if (($fp = fopen(__DIR__ .'\upload\uploaded_file.txt', "r")) !== FALSE)
{
    echo "json.txt OK"."<br>";
    while (($data = fgetcsv($fp, 0, ";") ) !== FALSE) 
    {
        $list[] = $data;         
    }
    fclose($fp);
    
 
    foreach ($list as $data)    
    {   
        $num = count($data); 
        //echo "num=".$num." ";
        if ($num>2)
        {   
           // echo "OK";
            
            $id = $data[0];
            $error = $data[1];
            $type = $data[2];
            $typetest = $data[3];
            $channel=$data[4];
            $param = trim(htmlspecialchars(stripslashes($data[5])));
            $datam = trim(htmlspecialchars(stripslashes($data[6])));
 
            echo " Item Name=".$id." ; Type=".$error." ; channel=".$channel." ; Parent=".$type." ; Relation=".$typetest." ; Children=; >> <br>";
 
            echo $param."<br>";
            echo $datam."<br>";
 
           
            
           
        }
        else
        {
            echo "не хватает столбцов ".$num."<br>" ;
        }
    }
}
else
{
    echo "файл отсутствует";
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Item Name=Тележка Б25.#205 ; Type=Прямые компоненты ; channel= ; Parent=Стандарт.#101 ; Relation=Тележка Б25 ; Children=; >>
 
 
Item Name=Комплект СВЛ с УЗ01К.#206 ; Type=Прямые компоненты ; channel= ; Parent=Стандарт.#101 ; Relation=Комплект СВЛ с УЗ01К ; Children=; >>
 
 
Item Name=ХОП 120 ; Type=Изделия и компоненты ; channel= ; Parent=Total ; Relation= ; Children=; >>
 
 
Item Name=Стандарт.#102 ; Type=Варианты комплектации ; channel= ; Parent=ХОП 120 ; Relation= ; Children=; >>
 
 
Item Name=Тележка МК25.#207 ; Type=Прямые компоненты ; channel= ; Parent=Стандарт.#102 ; Relation=Тележка МК25 ; Children=; >>
 
 
Item Name=Комплект СВЛ с УЗ01К.#208 ; Type=Прямые компоненты ; channel= ; Parent=Стандарт.#102 ; Relation=Комплект СВЛ с УЗ01К ; Children=; >>
ваш же код
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
$rows = [];
 
$resource = fopen(__DIR__ .'\upload\uploaded_file.txt', "r");
        
while ($row = fgetcsv($resource, 0, ";")) {
    $rows[] = $row;
}
 
 $rows = array_map(function($row) {
    return str_getcsv($row, ';');
}, explode("\n", $csv));
 
// Убираем заголовки
//unset($data[0]);
unset($rows[0]);
$output = [];
$rows   = array_reverse($rows);
 
foreach ($rows as [0 => $name, 2 => $parent]) {
    $output[$name]['itemName'] = $name;
    $output[$name]['parent']   = $parent;
 
    if ('' !== $parent) {
        $output[$parent]['children'][] = $output[$name];
        
        unset($output[$name]);
    }
}
 
$output = array_values($output);
 
echo json_encode($output);
ничего не вывел только квадратные скобки
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
30.08.2022, 19:36
Здесь наши полномочия всё.

Вам ничего невозможно объяснить.
2
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 944
31.08.2022, 08:09  [ТС]
Нет - если я работаю с только с row ($csv у меня и поныне и нет ) что я должен ставить в
PHP
1
 explode("\n", $csv)
что я должен ставить вместо $csv?

Добавлено через 1 час 6 минут
вот этого массива нет --
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$csv = '"Item Name";"Type";"Parent";"Relation"
"Total";"Изделия и компоненты";;
"ПВЛ";"Изделия и компоненты";"Total";
"Стандарт.#1";"Варианты комплектации";"ПВЛ";
"Тележка Б25.#2";"Прямые компоненты";"Стандарт.#1";"Тележка Б25"
"Комплект СВЛ стд+надпятник.#3";"Прямые компоненты";"Стандарт.#1";"Комплект СВЛ стд+надпятник"
"ПВЛ соч";"Изделия и компоненты";"Total";
"ПВЛ 103м Б27";"Изделия и компоненты";"Total";
"ХОП";"Изделия и компоненты";"Total";
"ХОП 101";"Изделия и компоненты";"Total";
"Стандарт.#101";"Варианты комплектации";"ХОП 101";
"Тележка Б25.#205";"Прямые компоненты";"Стандарт.#101";"Тележка Б25"
"Комплект СВЛ с УЗ01К.#206";"Прямые компоненты";"Стандарт.#101";"Комплект СВЛ с УЗ01К"
"ХОП 120";"Изделия и компоненты";"Total";
"Стандарт.#102";"Варианты комплектации";"ХОП 120";
"Тележка МК25.#207";"Прямые компоненты";"Стандарт.#102";"Тележка МК25"
"Комплект СВЛ с УЗ01К.#208";"Прямые компоненты";"Стандарт.#102";"Комплект СВЛ с УЗ01К"
"ХМВ 160м Б25";"Изделия и компоненты";"Total";
"ПЛ 80";"Изделия и компоненты";"Total";';
Добавлено через 52 секунды
и не может быть. а без разбиения на строки через array_map нельзя?

Добавлено через 40 минут
без array_map я так понял нельзя так как не получится разбиение строк и нормального json дерева - ну нет у меня массива $csv - по русски объяснить можете что тогда туда ставить?

Добавлено через 1 минуту
без array_map я так понял нельзя так как не получится разбиение строк и нормального json дерева - ну нет у меня массива $csv - по русски объяснить можете что тогда туда ставить?

Добавлено через 3 часа 1 минуту
Хотите сказать что

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 public function transform()
    {
        $output = [];
        $rows   = array_reverse($this->reader->read());
 
        foreach ($rows as [0 => $name, 2 => $parent]) {
            $output[$name]['itemName'] = $name;
            $output[$name]['parent']   = $parent;
 
            if ('' !== $parent) {
                $output[$parent]['children'][] = $output[$name];
                
                unset($output[$name]);
            }
        }
        
        return $output;
    }
}
выводит иерархию вида
Code
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
[
  {
    "itemName": "Total",
    "parent": null,
    "children": [
      {
        "itemName": "ПВЛ",
        "parent": "Total",
        "children": [
          {
            "itemName": "Стандарт.#1",
            "parent": "ПВЛ",
            "children": [
              {
                "itemName": "Тележка Б25.#2",
                "parent": "Стандарт.#1",
                "children": [
                  {
                    "itemName": "Стандарт.#5",
                    "parent": "Тележка Б25.#2",
                    "children": [
                      {
                        "itemName": "РБ ЦДЛР.9855.00.02.000.#17",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "БН ЦДЛР.9855.00.01.000.#18",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Колесная пара 25 т.#19",
                        "parent": "Стандарт.#5",
                        "children": [
                          {
                            "itemName": "Стандарт.#10",
                            "parent": "Колесная пара 25 т.#19",
                            "children": [
                              {
                                "itemName": "Колесо 25т.#52",
                                "parent": "Стандарт.#10",
                                "children": []
                              },
                              {
                                "itemName": "Ось 25т.#53",
                                "parent": "Стандарт.#10",
                                "children": []
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "
Добавлено через 11 минут
В общем вот я вставил код

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
$csv = '"Item Name";"Type";"Parent";"Relation"
"Total";"Изделия и компоненты";;
"ПВЛ";"Изделия и компоненты";"Total";
"Стандарт.#1";"Варианты комплектации";"ПВЛ";
"Тележка Б25.#2";"Прямые компоненты";"Стандарт.#1";"Тележка Б25"
"Комплект СВЛ стд+надпятник.#3";"Прямые компоненты";"Стандарт.#1";"Комплект СВЛ стд+надпятник"
"ПВЛ соч";"Изделия и компоненты";"Total";
"ПВЛ 103м Б27";"Изделия и компоненты";"Total";
"ХОП";"Изделия и компоненты";"Total";
"ХОП 101";"Изделия и компоненты";"Total";
"Стандарт.#101";"Варианты комплектации";"ХОП 101";
"Тележка Б25.#205";"Прямые компоненты";"Стандарт.#101";"Тележка Б25"
"Комплект СВЛ с УЗ01К.#206";"Прямые компоненты";"Стандарт.#101";"Комплект СВЛ с УЗ01К"
"ХОП 120";"Изделия и компоненты";"Total";
"Стандарт.#102";"Варианты комплектации";"ХОП 120";
"Тележка МК25.#207";"Прямые компоненты";"Стандарт.#102";"Тележка МК25"
"Комплект СВЛ с УЗ01К.#208";"Прямые компоненты";"Стандарт.#102";"Комплект СВЛ с УЗ01К"
"ХМВ 160м Б25";"Изделия и компоненты";"Total";
"ПЛ 80";"Изделия и компоненты";"Total";';
 
$rows = array_map(function($row) {
    return str_getcsv($row, ';');
}, explode("\n", $csv));
 
// Убираем заголовки
unset($rows[0]);
 
$output = [];
$rows   = array_reverse($rows);
 
foreach ($rows as [0 => $name, 2 => $parent]) {
    $output[$name]['itemName'] = $name;
    $output[$name]['parent']   = $parent;
 
    if ('' !== $parent) {
        $output[$parent]['children'][] = $output[$name];
        
        unset($output[$name]);
    }
}
 
$output = array_values($output);
 
//echo json_encode($output);
 
$json= json_encode($output);
echo unicode_escape_decode($json);
для наглядности чтобы получить иерархию вида
Code
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
[
  {
    "itemName": "Total",
    "parent": null,
    "children": [
      {
        "itemName": "ПВЛ",
        "parent": "Total",
        "children": [
          {
            "itemName": "Стандарт.#1",
            "parent": "ПВЛ",
            "children": [
              {
                "itemName": "Тележка Б25.#2",
                "parent": "Стандарт.#1",
                "children": [
                  {
                    "itemName": "Стандарт.#5",
                    "parent": "Тележка Б25.#2",
                    "children": [
                      {
                        "itemName": "РБ ЦДЛР.9855.00.02.000.#17",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "БН ЦДЛР.9855.00.01.000.#18",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Колесная пара 25 т.#19",
                        "parent": "Стандарт.#5",
                        "children": [
                          {
                            "itemName": "Стандарт.#10",
                            "parent": "Колесная пара 25 т.#19",
                            "children": [
                              {
                                "itemName": "Колесо 25т.#52",
                                "parent": "Стандарт.#10",
                                "children": []
                              },
                              {
                                "itemName": "Ось 25т.#53",
                                "parent": "Стандарт.#10",
                                "children": []
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "
но получил массив вида

Code
1
[{"children":[{"itemName":"ПЛ 80","parent":"Total"},{"itemName":"ХМВ 160м Б25","parent":"Total"},{"children":[{"children":[{"itemName":"Комплект СВЛ с УЗ01К.#208","parent":"Стандарт.#102"},{"itemName":"Тележка МК25.#207","parent":"Стандарт.#102"}],"itemName":"Стандарт.#102","parent":"ХОП 120"}],"itemName":"ХОП 120","parent":"Total"},{"children":[{"children":[{"itemName":"Комплект СВЛ с УЗ01К.#206","parent":"Стандарт.#101"},{"itemName":"Тележка Б25.#205","parent":"Стандарт.#101"}],"itemName":"Стандарт.#101","parent":"ХОП 101"}],"itemName":"ХОП 101","parent":"Total"},{"itemName":"ХОП","parent":"Total"},{"itemName":"ПВЛ 103м Б27","parent":"Total"},{"itemName":"ПВЛ соч","parent":"Total"},{"children":[{"children":[{"itemName":"Комплект СВЛ стд+надпятник.#3","parent":"Стандарт.#1"},{"itemName":"Тележка Б25.#2","parent":"Стандарт.#1"}],"itemName":"Стандарт.#1","parent":"ПВЛ"}],"itemName":"ПВЛ","parent":"Total"}],"itemName":"Total","parent":""}]
массив то вижу окей но где тут дерево не вижу

Добавлено через 19 минут
разбирусь я с массивами мне просто сообщите почему дерево не выходит вида

Code
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
[
  {
    "itemName": "Total",
    "parent": null,
    "children": [
      {
        "itemName": "ПВЛ",
        "parent": "Total",
        "children": [
          {
            "itemName": "Стандарт.#1",
            "parent": "ПВЛ",
            "children": [
              {
                "itemName": "Тележка Б25.#2",
                "parent": "Стандарт.#1",
                "children": [
                  {
                    "itemName": "Стандарт.#5",
                    "parent": "Тележка Б25.#2",
                    "children": [
                      {
                        "itemName": "РБ ЦДЛР.9855.00.02.000.#17",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "БН ЦДЛР.9855.00.01.000.#18",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Колесная пара 25 т.#19",
                        "parent": "Стандарт.#5",
                        "children": [
                          {
                            "itemName": "Стандарт.#10",
                            "parent": "Колесная пара 25 т.#19",
                            "children": [
                              {
а выходит всякое такое
Code
1
[{"children":[{"itemName":"ПЛ 80","parent":"Total"},{"itemName":"ХМВ 160м Б25","parent":"Total"},{"children":[{"children":[{"itemName":"Комплект СВЛ с УЗ01К.#208","parent":"Стандарт.#102"},{"itemName":"Тележка МК25.#207","parent":"Стандарт.#102"}],"itemName":"Стандарт.#102","parent":"ХОП 120"}],"itemName":"ХОП 120","parent":"Total"},{"children":[{"children":[{"itemName":"Комплект СВЛ с УЗ01К.#206","parent":"Стандарт.#101"},{"itemName":"Тележка Б25.#205","parent":"Стандарт.#101"}],"itemName":"Стандарт.#101","parent":"ХОП 101"}],"itemName":"ХОП 101","parent":"Total"},{"itemName":"ХОП","parent":"Total"},{"itemName":"ПВЛ 103м Б27","parent":"Total"},{"itemName":"ПВЛ соч","parent":"Total"},{"children":[{"children":[{"itemName":"Комплект СВЛ стд+надпятник.#3","parent":"Стандарт.#1"},{"itemName":"Тележка Б25.#2","parent":"Стандарт.#1"}],"itemName":"Стандарт.#1","parent":"ПВЛ"}],"itemName":"ПВЛ","parent":"Total"}],"itemName":"Total","parent":""}]
и такое
Code
1
[{"itemName":"Комплект СВЛ стд.#256","parent":"Стандарт.#112"},{"type":"Прямые компоненты"},{"typetest":"Комплект СВЛ стд"},{"channel":null},{"children":[{"itemName":"Комплект СВЛ стд.#256","parent":"Стандарт.#112"}]}][{"itemName":"Комплект СВЛ стд.#256","parent":"Стандарт.#112"},{"type":"Прямые компоненты"},{"typetest":"Комплект СВЛ стд"},{"channel":null},{"children":[{"itemName":"Комплект СВЛ стд.#256","parent":"Стандарт.#112"}]},{"itemName":"Стандарт.#112","parent":""},{"type":"Варианты комплектации"},{"typetest":"","channel":null}][{"itemName":"Комплект СВЛ стд.#256","parent":"Стандарт.#112"},{"type":"Прямые компоненты"},{"typetest":"Комплект СВЛ стд"},{"channel":null},{"children":[{"itemName":"Комплект СВЛ стд.#256","parent":"Стандарт.#112"}]},
ну никак не дерево?
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 944
01.09.2022, 14:49  [ТС]
Что подправить в скрипте

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
$csv = '"Item Name";"Type";"Parent";"Relation"
"Total";"Изделия и компоненты";;
"ПВЛ";"Изделия и компоненты";"Total";
"Стандарт.#1";"Варианты комплектации";"ПВЛ";
"Тележка Б25.#2";"Прямые компоненты";"Стандарт.#1";"Тележка Б25"
"Комплект СВЛ стд+надпятник.#3";"Прямые компоненты";"Стандарт.#1";"Комплект СВЛ стд+надпятник"
"ПВЛ соч";"Изделия и компоненты";"Total";
"ПВЛ 103м Б27";"Изделия и компоненты";"Total";
"ХОП";"Изделия и компоненты";"Total";
"ХОП 101";"Изделия и компоненты";"Total";
"Стандарт.#101";"Варианты комплектации";"ХОП 101";
"Тележка Б25.#205";"Прямые компоненты";"Стандарт.#101";"Тележка Б25"
"Комплект СВЛ с УЗ01К.#206";"Прямые компоненты";"Стандарт.#101";"Комплект СВЛ с УЗ01К"
"ХОП 120";"Изделия и компоненты";"Total";
"Стандарт.#102";"Варианты комплектации";"ХОП 120";
"Тележка МК25.#207";"Прямые компоненты";"Стандарт.#102";"Тележка МК25"
"Комплект СВЛ с УЗ01К.#208";"Прямые компоненты";"Стандарт.#102";"Комплект СВЛ с УЗ01К"
"ХМВ 160м Б25";"Изделия и компоненты";"Total";
"ПЛ 80";"Изделия и компоненты";"Total";';
 
$rows = array_map(function($row) {
    return str_getcsv($row, ';');
}, explode("\n", $csv));
 
// Убираем заголовки
unset($rows[0]);
$output = [];
$rows   = array_reverse($rows);
 
foreach ($rows as [0 => $name, 2 => $parent]) {
    $output[$name]['itemName'] = $name;
    $output[$name]['parent']   = $parent;
 
    if ('' !== $parent) {
        $output[$parent]['children'][] = $output[$name];
        
        unset($output[$name]);
    }
}
 
$output = array_values($output);
 
//echo json_encode($output);
 
$json= json_encode($output);
echo unicode_escape_decode($json);
чтобы вылезла иерархия?

Добавлено через 1 минуту
вида

Code
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
[
  {
    "itemName": "Total",
    "parent": null,
    "children": [
      {
        "itemName": "ПВЛ",
        "parent": "Total",
        "children": [
          {
            "itemName": "Стандарт.#1",
            "parent": "ПВЛ",
            "children": [
              {
                "itemName": "Тележка Б25.#2",
                "parent": "Стандарт.#1",
                "children": [
                  {
                    "itemName": "Стандарт.#5",
                    "parent": "Тележка Б25.#2",
                    "children": [
                      {
                        "itemName": "РБ ЦДЛР.9855.00.02.000.#17",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "БН ЦДЛР.9855.00.01.000.#18",
                        "parent": "Стандарт.#5",
                        "children": []
                      },
                      {
                        "itemName": "Колесная пара 25 т.#19",
                        "parent": "Стандарт.#5",
                        "children": [
                          {
                            "itemName": "Стандарт.#10",
                            "parent": "Колесная пара 25 т.#19",
                            "children": [
                              {
а не

Code
1
[{"itemName":"Комплект СВЛ стд.#256","parent":"Стандарт.#112"},{"type":"Прямые компоненты"},{"typetest":"Комплект СВЛ стд"},{"channel":null},{"children":[{"itemName":"Комплект СВЛ стд.#256","parent":"Стандарт.#112"}]}][{"itemName":"Комплект СВЛ стд.#256","parent":"Стандарт.#112"},{"type":"Прямые компоненты"},{"typetest":"Комплект СВЛ стд"},{"channel":null},{"children":[{"itemName":"Комплект СВЛ стд.#256","parent":"Стандарт.#112"}]},{"itemName":"Стандарт.#112","parent":""},{"type":"Варианты комплектации"},{"typetest":"","channel":null}][{"itemName":"Комплект СВЛ стд.#256","parent":"Стандарт.#112"},{"type":"Прямые компоненты"},{"typetest":"Комплект СВЛ стд"},{"channel":null},{"children":[{"itemName":"Комплект СВЛ стд.#256","parent":"Стандарт.#112"}]},
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
01.09.2022, 18:50
Dorofej, замените строки
PHP
1
2
$json= json_encode($output);
echo unicode_escape_decode($json);
на
PHP
1
2
3
$json = json_encode($output, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
 
echo $json;
1
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 944
02.09.2022, 05:42  [ТС]
вывелось не совсем дерево - чуть пробелы расширились просто - может разделитель поставить типа }, { и при срабатывании разделителя перевод каретки?
Code
1
[ { "itemName": "Комплект СВЛ стд.#256", "parent": "Стандарт.#112" }, { "type": "Прямые компоненты" }, { "typetest": "Комплект СВЛ стд" }, { "channel": null }, { "children": [ { "itemName": "Комплект СВЛ стд.#256", "parent": "Стандарт.#112" } ] } ][ { "itemName": "Комплект СВЛ стд.#256", "parent": "Стандарт.#112" }, { "type": "Прямые компоненты" }, { "typetest": "Комплект СВЛ стд" }, { "channel": null }, { "children": [ { "itemName": "Комплект СВЛ стд.#256", "parent": "Стандарт.#112" } ] }, { "itemName": "Стандарт.#112", "parent": "" }, { "type": "Варианты комплектации" }, { "typetest": "", "channel": null } ][ { "itemName": "Комплект СВЛ стд.#256", "parent": "Стандарт.#112" }, { "type": "Прямые компоненты" }, { "typetest": "Комплект СВЛ стд" }, { "channel": null }, { "children": [ { "itemName": "Комплект СВЛ стд.#256", "parent": "Стандарт.#112" } ] }, { "itemName": "Стандарт.#112", "parent": "" }, { "type": "Варианты комплектации" }, { "typetest": "", "channel": null }, { "itemName": "Тележка Б25.#255", "parent": "Доп1.#113" }, { "type": "Прямые компоненты" }, { "typetest": "Тележка Б25" }, { "channel": null }, { "children": [ { "itemName": "Тележка Б25.#255", "parent": "Доп1.#113" } ] } ][ { "itemName": "Комплект СВЛ стд.#256", "parent": "Стандарт.#112" }, { "type": "Прямые компоненты" }, { "typetest": "Комплект СВЛ стд" }, { "channel": null }, { "children": [ { "itemName": "Комплект СВЛ стд.#256", "parent": "Стандарт.#112" } ] }, { "itemName": "Стандарт.#112", "parent": "" }, { "type": "Варианты комплектации" }, { "typetest": "", "channel": null }, { "itemName": "Тележка Б25.#255", "parent": "Доп1.#113" }, { "type": "Прямые компоненты" }, { "typetest": "Тележка Б25" }, { "channel": null }, { "children": [ { "itemName": "Тележка Б25.#255", "parent": "Доп1.#113" } ] }, { "itemName": "Доп1.#113", "parent": "" }, { "type": "Варианты комплектации" }, { "typetest": "", "channel": null } ][ { "itemName": "Комплект СВЛ стд.#256", "parent": "Стандарт.#112" }, { "type": "Прямые компоненты" }, { "typetest": "Комплект СВЛ стд" }, { "channel": null }, { "children": [ { "itemName": "Комплект СВЛ стд.#256", "parent": "Стандарт.#112" } ] }, { "itemName": "Стандарт.#112", "parent": "" }, { "type": "Варианты комплектации" }, { "typetest": "", "channel": null }, { "itemName": "Тележка Б25.#255", "parent": "Доп1.#113" }, { "type": "Прямые компоненты" }, { "typetest": "Тележка Б25" }, { "channel": null }, { "children": [ { "itemName": "Тележка Б25.#255", "parent": "Доп1.#113" } ] }, { "itemName": "Доп1.#113", "parent": "" }, { "type": "Варианты комплектации" }, { "typetest": "", "channel": null }, { "itemName": "Скользун ЦДЛР 9855.00.03.000", "parent": "Total" }, { "type": "Изделия и компоненты" }, { "typetest": "", "channel": null }, { "children": [ { "itemName": "Скользун ЦДЛР 9855.00.03.000", "parent": "Total" } ] } ][ { "itemName": "Комплект СВЛ стд.#256", "parent": "Стандарт.#112" }, { "type": "Прямые компоненты" }, { "typetest": "Комплект СВЛ стд" }, { "channel": null }, { "children": [ { "itemName": "Комплект СВЛ стд.#256", "parent": "
и при срабатывании ОПП три ошибки выдает - они в основном решаемые но когда натыкается на класс
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
class Transformer
{
    public function __construct(private Reader $reader)
    {   
    }
    
    public function transform()
    {
        $output = [];
        $rows   = array_reverse($this->reader->read());
 
        foreach ($rows as [0 => $name, 2 => $parent]) {
            $output[$name]['itemName'] = $name;
            $output[$name]['parent']   = $parent;
 
            if ('' !== $parent) {
                $output[$parent]['children'][] = $output[$name];
                
                unset($output[$name]);
            }
        }
        
        return $output;
    }
}
то ругается на строку public function __construct(private Reader $reader) именно на private (Parse error: syntax error, unexpected 'private' (T_PRIVATE), expecting variable (T_VARIABLE) in )
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
02.09.2022, 06:26
Цитата Сообщение от Dorofej Посмотреть сообщение
вывелось не совсем дерево
Потому что браузер думает, что пришёл HTML (из-за заголовков, которые ему дал сервер при ответе). После открывающего тега <?php добавьте:
PHP
1
header('Content-Type: application/json');
Либо просто нажмите Ctrl+U в браузере, увидите JSON в виде дерева.
Цитата Сообщение от Dorofej Посмотреть сообщение
ругается на строку public function __construct(private Reader $reader)
Вы на старой версии PHP запускаете.
Напишите так:
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
class Transformer
{
    private $reader;
 
    public function __construct(Reader $reader)
    {
        $this->reader = $reader;
    }
    
    public function transform()
    {
        $output = [];
        $rows   = array_reverse($this->reader->read());
 
        foreach ($rows as [0 => $name, 2 => $parent]) {
            $output[$name]['itemName'] = $name;
            $output[$name]['parent']   = $parent;
 
            if ('' !== $parent) {
                $output[$parent]['children'][] = $output[$name];
                
                unset($output[$name]);
            }
        }
        
        return $output;
    }
}
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 944
02.09.2022, 18:33  [ТС]
проверю отпишу

Добавлено через 1 час 18 минут
пока пишет Warning: Cannot modify header information - headers already sent by - но видимо из за пробелов перед<? или еще почему -пока выясняю а массив тот же без изменений
вот код
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
header('Content-Type: application/json');
/*
if (($fp = fopen(__DIR__ .'\upload\uploaded_file.txt', "r")) !== FALSE)
{
    echo "json.txt OK"."<br>";
    while (($data = fgetcsv($fp, 0, ";") ) !== FALSE) 
    {
        $list[] = $data;         
    }
    fclose($fp);
    
 
    foreach ($list as $data)    
    {   
        $num = count($data); 
        //echo "num=".$num." ";
        if ($num>2)
        {   
           // echo "OK";
            
            $id = $data[0];
            $error = $data[1];
            $type = $data[2];
            $typetest = $data[3];
            $channel=$data[4];
            $param = trim(htmlspecialchars(stripslashes($data[5])));
            $datam = trim(htmlspecialchars(stripslashes($data[6])));
 
            echo " Item Name=".$id." ; Type=".$error." ; channel=".$channel." ; Parent=".$type." ; Relation=".$typetest." ; Children=; >> <br>";
 
            echo $param."<br>";
            echo $datam."<br>";
 
           
            
           
        }
        else
        {
            echo "не хватает столбцов ".$num."<br>" ;
        }
    }
}
else
{
    echo "файл отсутствует";
}
 
*/
$rows = [];
if (($resource = fopen(__DIR__ .'\upload\uploaded_file.txt', "r")) !== FALSE){
 
//$resource = fopen(__DIR__ .'\upload\uploaded_file.txt', "r");
        
while (($row = fgetcsv($resource, 0, ";"))!== FALSE) {
    $rows[] = $row;
}
 
fclose($resource);
} 
/* $rows = array_map(function($row) {
    return str_getcsv($row, ';');
}, explode("\n", $row)); */
 
// Убираем заголовки
//unset($data[0]);
//unset($rows[0]);
$output = [];
$rows   = array_reverse($rows);
 function unicode_escape_decode($str) {
    return html_entity_decode(
            preg_replace('~\\\u([a-zA-Z0-9]{4})~', '&#x$1;', $str), null, 'UTF-8'
    );
}   
foreach ($rows as [0 => $name, 1 => $names ,2 => $parent,3 => $par,4 => $relation]) {
    $output[$name]['itemName'] = $name;
    $output[$name]['parent']   = $parent;
    $output[$names]['type']= $names;
    $output[$par]['typetest']= $par;
    $output[$relation]['channel']= $relation;
 
    if ('' !== $parent) {
        $output[$parent]['children'][] = $output[$name];
        
        //unset($output[$name]);
    }
$output = array_values($output);
//echo  $output."<br>";
//echo unicode_escape_decode($output);
$json = json_encode($output, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
//$json= json_encode($output);
 
//echo json_encode($output);
 
//echo unicode_escape_decode($json);
 
 
$json = unicode_escape_decode($json);
 
 
/*$json = array_map(function($output) {
    return str_getcsv($output, ';');
}, explode("\n", $output));
$outputs = [];*/
echo $json;
}
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
02.09.2022, 18:43
Цитата Сообщение от Dorofej Посмотреть сообщение
а массив тот же без изменений
Так и будет, пока не разберётесь с ошибкой
Цитата Сообщение от Dorofej Посмотреть сообщение
Cannot modify header information - headers already sent by
См. статью: Что означает предупреждение "headers already sent"
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 944
04.09.2022, 15:56  [ТС]
output_buffering = 4096 эту включил в php.ini

ob_start();
header('Content-Type: application/json'); вот так в самом крипте - почему так отображается? Таже ошибка

Добавлено через 1 час 17 минут
через ctrl-U только что то выводится

Добавлено через 1 минуту
теперь все осталось в файл json записать и складировать в папку или корень

Добавлено через 44 минуты
осталось все засунуть в json файл - а файл в папку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.09.2022, 15:56
Помогаю со студенческими работами здесь

Как переделать формат даты с 41719 на 21.03.2014
Библиотека, которая по идее должна передавать скрипту дату 21.03.2014, передаёт её в виде числа 41719. Кто-нибудь знает, как преобразовать...

Как построить такой формат сохранения данных в json
Скрипт отправки данных в json файл // эта функция сработает при нажатии на кнопку function sendJSON() { // с помощью...

Как на JavaScript преобразовать документ XML в формат JSON?
Добрый день, подскажите, пожалуйста, имеется ли такая возможность у javaScript? Есть файл в формате xml, необходимо перевести его в формат...

Как передать выборку из базы данных в формат json
Здравствуйте! Стоит следующая задача: Есть база данных с моделями автомобилей и размерами ламп для каждой модели. Выборку из базы по...

Как вывести данные из input на экран в формат json?
Добрый день всем! Очень нужна ваша помощь!!! Скажите пожалуйста, как вывести данные из input на экран в формат json?


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru