Intereting Posts
Как я могу использовать функцию preg_replace PHP для преобразования кодовых точек Unicode в реальные символы / объекты HTML? Отображение Php Array приводит к таблице Html Как я могу удалить все пустые значения, когда я взорву строку с помощью PHP? Вход с Amazon говорит, что пользователь не согласился, но у них есть – Alexa SMAPI Regex для извлечения всех URL-адресов, не содержащих определенную строку API-интерфейс Gmail PHP Отправка электронной почты php merge json массивы Как объединить два массива путем суммирования объединенных значений OpenCart Call Different Controller jQuery Tokeninput добавить, если не существует Отображение всплывающей подсказки, когда пользователь наводится на ярлык переключателя в JQuery Управление анимированными изображениями в PHP Как анализировать URL-адрес Zend для параметров? печать качественных изображений с помощью php и GD Как сделать системный вызов удаленно?

PHP Как закрыть теги html из этого массива?

У меня есть массив с html-тегами, и мне нужно сделать вывод с некоторой функцией с PHP, но я не могу сделать это правильно. Мне нужна помощь, чтобы сделать этот тег закрывающим тегами правильным.

Этот массив уже построен по строкам, но я не могу сделать родителей.

НЕОБХОДИМЫЕ ВЫХОДЫ:

<form class="form-horizontal"> <div class="firstclass">FIRSTCLASS</div> <div class="form-group"> <label class="col-sm-3 control-label">TEXT <div class="col-sm-9"> <span class="myspan">MYSPAN <div class="myclass">MYCLASS </div> </span> </div> </label> </div> <div class="firstclass">FIRSTCLASS</div> <div class="form-group"> <label class="col-sm-3 control-label">TEXT <div class="col-sm-9"> <span class="myspan">MYSPAN <div class="myclass">MYCLASS </div> </span> </div> </label> </div> <div class="firstclass">FIRSTCLASS</div> </form> 

Массив PHP уже построен:

 $data = [ [ 'tag' => 'form', 'options' => ' class="form-horizontal"', 'text' => false, 'level' => 1, 'parents' => true, ], [ 'tag' => 'div', 'options' => ' class="firstclass"', 'text' => 'FIRSTCLASS', 'level' => 2, 'parents' => false, ], [ 'tag' => 'div', 'options' => ' class="form-group"', 'text' => 'FORMGROUP', 'level' => 2, 'parents' => true, ], [ 'tag' => 'label', 'options' => ' class="col-sm-3 control-label"', 'text' => 'TEXT', 'level' => 3, 'parents' => true, ], [ 'tag' => 'div', 'options' => ' class="col-sm-9"', 'text' => false, 'level' => 4, 'parents' => true ], [ 'tag' => 'span', 'options' => ' class="myspan"', 'text' => 'MYSPAN', 'level' => 5, 'parents' => true ], [ 'tag' => 'div', 'options' => ' class="myclass"', 'text' => 'MYCLASS', 'level' => 6, 'parents' => false ], [ 'tag' => 'div', 'options' => ' class="firstclass"', 'text' => 'FIRSTCLASS', 'level' => 2, 'parents' => false ], [ 'tag' => 'div', 'options' => ' class="form-group"', 'text' => 'FORMGROUP', 'level' => 2, 'parents' => true ], [ 'tag' => 'label', 'options' => ' class="col-sm-3 control-label"', 'text' => 'TEXT', 'level' => 3, 'parents' => true ], [ 'tag' => 'div', 'options' => ' class="col-sm-9"', 'text' => false, 'level' => 4, 'parents' => true ], [ 'tag' => 'span', 'options' => ' class="myspan"', 'text' => 'MYSPAN', 'level' => 5, 'parents' => true ], [ 'tag' => 'div', 'options' => ' class="myclass"', 'text' => 'MYCLASS', 'level' => 6, 'parents' => false ], [ 'tag' => 'div', 'options' => ' class="firstclass"', 'text' => 'FIRSTCLASS', 'level' => 2, 'parents' => false ] ]; 

И это функция с неправильным выходом:

 function get($data) { $top= ''; $botttom= ''; foreach($data as $key => $row) { $tag = isset($row['tag']) ? $row['tag'] : false; $text = isset($row['text']) ? $row['text'] : false; $level = isset($row['level']) ? $row['level'] : false; $options = isset($row['options']) ? $row['options'] : false; $parents = isset($row['parents']) ? $row['parents'] : false; $openTag = '<'.$tag.$options.'>'.$text; $closeTag = '</'.$tag.'>'; if($parents) { $top.= $openTag; } else { $botttom = $closeTag.$botttom; } } $result = $top.$botttom; return $result; } echo(get($data)); 

Вложенные массивы и использование рекурсии могут выглядеть так:

 <?php $data = [ [ 'tag' => 'form', 'options' => ' class="form-horizontal"', 'text' => false, 'items' => [ [ 'tag' => 'div', 'options' => ' class="firstclass"', 'text' => 'FIRSTCLASS', ], [ 'tag' => 'div', 'options' => ' class="form-group"', 'text' => 'FORMGROUP', 'items' => [ [ 'tag' => 'label', 'options' => ' class="col-sm-3 control-label"', 'text' => 'TEXT', 'items' => [ [ 'tag' => 'div', 'options' => ' class="col-sm-9"', 'items' =>[ [ 'tag' => 'span', 'options' => ' class="myspan"', 'text' => 'MYSPAN', 'items' => [ [ 'tag' => 'div', 'options' => ' class="myclass"', 'text' => 'MYCLASS', ], ], ], ], ], ], ], ], ], [ 'tag' => 'div', 'options' => ' class="firstclass"', 'text' => 'FIRSTCLASS', ], [ 'tag' => 'div', 'options' => ' class="form-group"', 'text' => 'FORMGROUP', 'items' => [ [ 'tag' => 'label', 'options' => ' class="col-sm-3 control-label"', 'text' => 'TEXT', 'items' => [ [ 'tag' => 'div', 'options' => ' class="col-sm-9"', 'items' => [ [ 'tag' => 'span', 'options' => ' class="myspan"', 'text' => 'MYSPAN', 'items' => [ [ 'tag' => 'div', 'options' => ' class="myclass"', 'text' => 'MYCLASS', ], ], ], ], ], ], ], ], ], [ 'tag' => 'div', 'options' => ' class="firstclass"', 'text' => 'FIRSTCLASS', ], ], ], ]; 

И код для генерации html:

 <?php function get($data) { $result = ''; foreach ($data as $key => $row) { $tag = array_key_exists('tag', $row) ? $row['tag'] : false; $text = array_key_exists('text', $row) ? $row['text'] : ''; $options = array_key_exists('options', $row) ? $row['options'] : ''; $nested = array_key_exists('items', $row) ? get($row['items'])) : ''; if (false === $tag) { continue; // May throw exception or some error handling } $result .= "<{$tag} {$options}>{$text}{$nested}</{$tag}>"; } return $result; } echo(get($data)); 

Для гнездования исходных данных здесь находится функция вложенности:

 function nest(array $data = array()) { $level = null; $last = null; foreach ($data as $index => $item) { $level = $level ?? $item['level']; if (null !== $last && $item['level'] > $level) { $data[$last]['items'][] = $item; unset($data[$index]); } if ($item['level'] == $level) { $last = $index; } } foreach ($data as $index => $item) { if (array_key_exists('items', $item)) { $data[$index]['items'] = nest($item['items']); } } return $data; } print_r(nest($data));die(); не function nest(array $data = array()) { $level = null; $last = null; foreach ($data as $index => $item) { $level = $level ?? $item['level']; if (null !== $last && $item['level'] > $level) { $data[$last]['items'][] = $item; unset($data[$index]); } if ($item['level'] == $level) { $last = $index; } } foreach ($data as $index => $item) { if (array_key_exists('items', $item)) { $data[$index]['items'] = nest($item['items']); } } return $data; } print_r(nest($data));die();