Как удалить запятые из числовых значений в строке с другими запятыми? - PullRequest
1 голос
/ 10 апреля 2019

Я работаю с массивом, который содержит выписку по счету. Я хочу иметь возможность удалять запятые из числовых значений, чтобы иметь возможность взрываться с запятой без потери жизненно важных значений.

Например, мой массив содержит индексы, такие как:

26 => 20/08/2099,"ATM CASH WITHDRAWAL (ON-US) ATM CASH WITHDRAWAL (ON-US) EMPEMOM, LAGA ATM 2 LOGO NG 000360585490","",20/08/2018,"5,000","","1,316.01"

27 => 27/08/2027,BANK CHARGE 26 SMS CHARGE AND VAT FOR 27TH JUL - 23RD AUG 2018,2803064 028,27/08/2018,109.2,"","1,206.81"

Я хочу удалить запятую в «5000» и другие денежные значения, не удаляя запятые между каждой строкой, чтобы результат выглядел следующим образом:

26 => 20/08/2099,"ATM CASH WITHDRAWAL (ON-US) ATM CASH WITHDRAWAL (ON-US) EMPEMOM, LAGA ATM 2 LOGO NG 000360585490","",20/08/2018,"5000","","1316.01"

27 => 27/08/2027,BANK CHARGE 26 SMS CHARGE AND VAT FOR 27TH JUL - 23RD AUG 2018,2803064 028,27/08/2018,109.2,"","1206.81"

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Вы также можете использовать array_map с preg_replace_callback и в качестве шаблона вы можете использовать:

"\d{1,3}(?:,\d{3})+\.\d{2}"
  • "\d{1,3} Совпадение ", за которым следуют 1-3 цифры
  • (?:,\d{3})! Повторите 1+ раз, используя запятую и 3 цифры
  • \.\d{2}" Совпадение точки и 2 цифр, за которыми следует "

Regex demo | Php demo

При обратном вызове preg_replace_callback замените запятую пустой строкой и верните совпадение.

Например:

$atm = array(
    '26' => '20/08/2099,"ATM CASH WITHDRAWAL (ON-US) ATM CASH WITHDRAWAL (ON-US) EMPEMOM, LAGA ATM 2 LOGO NG 000360585490","",20/08/2018,"5,000","","1,316.01"',
    '27' => '27/08/2027,BANK CHARGE 26 SMS CHARGE AND VAT FOR 27TH JUL - 23RD AUG 2018,2803064 028,27/08/2018,109.2,"","1,206.81"'
);

$atm = array_map(function($x) {
    return preg_replace_callback('/"\d{1,3}(?:,\d{3})+\.\d{2}"/', function($m) {
       return  str_replace(',', '', $m[0]);
    }, $x);
}, $atm);

print_r($atm);

Результат:

Array
(
    [26] => 20/08/2099,"ATM CASH WITHDRAWAL (ON-US) ATM CASH WITHDRAWAL (ON-US) EMPEMOM, LAGA ATM 2 LOGO NG 000360585490","",20/08/2018,"5,000","","1316.01"
    [27] => 27/08/2027,BANK CHARGE 26 SMS CHARGE AND VAT FOR 27TH JUL - 23RD AUG 2018,2803064 028,27/08/2018,109.2,"","1206.81"
)
0 голосов
/ 10 апреля 2019

Вы можете использовать foreach свой массив и разбивать его через запятую, затем заменить "," каждый массив, а затем проверить, является ли он числом или нет

массив foreach, затем взорвать строку запятой

$stringArray=explode(",",$str)

затем замените "," каждые $ stringArray

$CheckNumber= str_replace(',', '', $string);

и проверьте, является ли это число:

if (is_numeric($CheckNumber))
   $stringArray[i]=$CheckNumber;

в конце массива соединения

join(",",$stringArray);
...