PHP заменяет теги динамическими значениями, включая условие IF

1

Замена динамических значений в PHP может быть достигнута с помощью следующего кода:

$replace = array('{COVER_AMT}','{LIABILITY_AMT}','{TOTAL_AMT}');
$with = array('90', '90', '0');

$myString = 'This is Cover Amt : {COVER_AMT} . This is liablity amount :     {LIABILITY_AMT} . This is total amount : {TOTAL_AMT}';

echo str_replace($replace, $with, $myString);

вывод:

This is Cover Amt : 90 . This is liablity amount : 90 . This is total amount : 0

Это даст правильный результат.

Но когда значение равно 0, он не должен отображать сам текст. Для этого случая это общая сумма не должна отображаться вообще, так как она равна 0.

Проверка с условием If не является отличным решением, так как это испортит код, если есть много "0".

Если имеется около 100 элементов массива, невозможно будет проверить для каждого значения. Любое решение, которое может использоваться для любого количества входов данных, будет отличным.

Любой, у кого есть отличная идея для этого.

Благодарю.

  • 0
    тебе достаточно моего решения?
  • 1
    спасибо, выглядит великолепно.
Теги:

2 ответа

1
Лучший ответ

Почему бы не попробовать что-то вроде этого:

<?php
$replace = array('{COVER_AMT}','{LIABILITY_AMT}','{TOTAL_AMT}', 'This is total amount : 0');
$with = array('90', '90', '0','');

$myString = 'This is Cover Amt : {COVER_AMT} . This is liablity amount :     {LIABILITY_AMT} . This is total amount : {TOTAL_AMT}';


echo str_replace($replace, $with, $myString); 
?>

Он удалит только последнюю часть, если общая сумма равна 0.

По редактируемому вопросу:

<?php

$replace = array('{COVER_AMT}','{LIABILITY_AMT}','{TOTAL_AMT}');
$with = array('0', '90', '0');

$myString = 'This is Cover Amt : {COVER_AMT} . This is liablity amount :     {LIABILITY_AMT} . This is total amount : {TOTAL_AMT}';

$myString = str_replace($replace, $with, $myString);
$myString_array = explode("This is",$myString);
foreach($myString_array as $myString_sliced) { 
$pattern = '/(\.?)(This is )(.*?) 0(\s?)(\.?)/i';
$replacement = '';
if($myString_sliced)
echo preg_replace($pattern, $replacement, "This is ".$myString_sliced);
}
?>
  • 0
    Да, это может быть одним из решений, но не может быть расширено. Сейчас это имеет только одно значение, равное 0. Допустим, если у вас есть массив из 100 элементов, это будет невозможно. Любое другое решение было бы замечательно.
  • 1
    @ user96675 вы должны дать более подробную информацию в первую очередь.
Показать ещё 1 комментарий
0

сначала замените все 0 из пустой строки, попробуйте этот код

<?php 
$replace = array('{COVER_AMT}','{LIABILITY_AMT}','{TOTAL_AMT}');
$with = array('90', '90', '0');
$with = array_map(function($v){return $v <= 0 ? '' : $v;}, $with);

$myString = 'This is Cover Amt : {COVER_AMT} . This is liablity amount :     {LIABILITY_AMT} . This is total amount : {TOTAL_AMT}';

echo str_replace($replace, $with, $myString);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню