Я хочу циклически просматривать массив с отформатированным 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;}?>
Вывод:
PrinsHendriklaan151075 Amsterdam€6750000/428m2Huizingalaan187189-191Amsterdam€3000000/1.155m2
Ответ 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));echostr_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