Я хочу циклически просматривать массив с отформатированным HTML, который был задан ранее. Например:
$display_format = "%address%<br>%zipcode% %city%<br>€%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>€ %price% / %m2% m2";
foreach
(
$array_displayas
$i
=>
$arr){
$keys
=array_keys(
$arr);
$tmp
=
$display_format;
foreach
(
$keysas
$key
){
$pttn
=sprintf(
'@%%%s%%@',
$key);
$tmp
=preg_replace(
$pttn,
$arr[
$key],
$tmp);
}
echo
$tmp
;
}
?>
Вывод:
PrinsHendriklaan
15
1075 Amsterdam€6750000
/
428
m2Huizingalaan
187189-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>€ %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_displayas
$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_displayas
$comp_array
) {
foreach
(
$comp_arrayas
$value
){
$display_format
=
"array_key($comp_array, $value) : $value"}
И теперь у вас есть все поля, отображаемые в необходимом формате, как только вы добавите их в массив.
Web