Web

Как выполнить цикл по массиву в php с форматированным html оформлением?

Я хочу циклически просматривать массив с отформатированным HTML, который был задан ранее. Например:

 $display_format = "%address%<br>%zipcode% %city%<br>&euro;%price%/%m2% m2"

 И у меня есть такой массив:

$array_display = array (array ( 'address' => 'Prins Hendriklaan 15', 'zipcode' => '1075', 'city' => 'Amsterdam', 'price' => 6750000,  'm2' => 428 ), array ( 'address' => 'Huizingalaan',  'zipcode' =>'187 189-191', 'city'=> Amsterdam, 'price' => 3000000,  'm2' => 1.155) )

 

Я хочу циклом пройтись по $array_display и отобразить каждую строку в формате из $display_format. И самое главное, когда я обновляю заказ или добавляю дополнительное поле или формат $display_format, тогда он будет, соответственно динамически меняться в цикле, для заказа конкретных полей (это самая сложная часть).

 

Ответ 1

После исправления небольшой ошибки значения Amsterdam, без кавычек, можно использовать preg_replace с шаблоном, основанным на ключах массива, найденных в исходных данных ($array_display).

<?php
 
    $array_display = array ( 
        array (
            'address'   => 'Prins Hendriklaan 15',
            'zipcode'   => '1075',
            'city'      => 'Amsterdam',
            'price'     => 6750000,
            'm2'        => 428
        ), 
        array (
            'address'   => 'Huizingalaan', 
            'zipcode'   => '187 189-191', 
            'city'      => 'Amsterdam', 
            'price'     => 3000000, 
            'm2'        => 1.155
        )
    );
    
    
    $display_format = "%address%<br>%zipcode% %city%<br>&euro; %price% / %m2% m2";
    
    foreach( $array_display as $i=>$arr ){
        $keys=array_keys( $arr );
        $tmp=$display_format;
        foreach( $keys as $key ){
            $pttn=sprintf('@%%%s%%@',$key);
            $tmp=preg_replace($pttn,$arr[$key],$tmp);
        }
        echo $tmp;
    }
 
?>

 

Вывод:

Prins Hendriklaan 15
1075 Amsterdam
 6750000 / 428 m2Huizingalaan
187 189-191 Amsterdam
 3000000 / 1.155 m2

 

Ответ 2

Перебираем массив, $placeholders = array_map(function($value) { return "%$value%"; }, array_keys($display)); Это код, создаст список значений из ключей вашего массива (%address%, %city% ...), затем заменит их на фактические значения из массивов.

Этот код не проверяет существование "заполнителей", в вашем $display_format

$display_format = "%address%<br>%zipcode% %city%<br>&euro; %price% / %m2% m2";
$array_display = array (array ( 'address' => 'Prins Hendriklaan 15','zipcode' => '1075', 'city' => 'Amsterdam', 'price' => 6750000, 'm2' => 428 ), array ( 'address' => 'Huizingalaan', 'zipcode' =>'187 189-191', 'city'=> 'Amsterdam', 'price' => 3000000, 'm2' => 1.155) );
 
foreach ($array_display as $display) {
    $placeholders = array_map(function($value) { return "%$value%"; }, array_keys($display));
    echo str_replace($placeholders, $display, $display_format);
}

 

 Ответ 3

Думаю, что-то вроде этого могло бы сработать:

<?php
 
$array_display = array( array ( 'address' => 'Prins Hendriklaan 15','zipcode' => '1075', 'city' => 'Amsterdam', 'price' => 6750000, 'm2' => 428 ), array ( 'address' => 'Huizingalaan', 'zipcode' =>'187 189-191', 'city'=> 'Amsterdam', 'price' => 3000000, 'm2' => 1.155) );
 
foreach($array_display as $comp_array) {
 
    foreach($comp_array as $value){
 
        $display_format = "array_key($comp_array, $value) : $value"
}

 

И теперь у вас есть все поля, отображаемые в необходимом формате, как только вы добавите их в массив.

Схожие статьи

Web-технологии: курс для начинающих веб-дизайнеров и разработчиков
Web

Web-технологии: курс для начинающих веб-дизайнеров и разработчиков

Что такое PHP-функция array_merge с сохранением ключей: описание
Web

Что такое PHP-функция array_merge с сохранением ключей: описание

Web

Почему форма с enctype возвращает нулевой файл в запросе

Web

Как получить параметры строки URL-запроса

×