Skip to content
Advertisement

Remove pieces of string

Ok, ive imported contents of .txt file into array, and im having problems with removing some parts of the string in array. This is the sample output of the array:

[55] =>                      28649706-20440929           73,66    02    
[57] =>                      28613238-20600568          255,56    03  
[59] =>                      40595693002                777,16    04  
[79] =>                      078-50-4327086             691,24    02

I would like to:

  1. If string has only one hyphen, like in [55] and [57], delete first part of the string together with hyphen,

  2. If string has 2 hyphens, like in [79], leave it as it is,

  3. Remove last 2 numbers in all array elements,
  4. I would like to export it in .csv file with each part of the string in its own column, suppose i need delimiter between, or i need to split those strings in its own subarray ?

So far, i’ve able to solve issue no. 3, delete last 2 characters from array elements:

$content = file_get_contents($_FILES['file']['tmp_name']);
$output = explode("n", $content);

foreach ($output as $key => $index) {
    $string = preg_replace('/X{3}z/u', '', $output);
}

Still, im having issues with removing parts of the string with 2 hyphens, and outputting it in .csv in separate columns.

Thank you.

EDIT:

i’ve managed to create downloadable file, but data isnt structured as expected, they are all placed in first row, and i would like to place it in each separate column:

header('Content-Encoding: UTF-8');
header('Content-Type: text/csv; charset=utf-8' );
header(sprintf('Content-Disposition: attachment; filename='.$_FILES['file']['name'].'-%s.csv', date( 'dmY-His' )));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
ob_end_clean();

$fp = fopen("php://output", 'w');
fputcsv($fp, $string);

fclose($fp);
die();

Advertisement

Answer

I suggest

$string = preg_replace('~^s*(?:d+-(?=d[^-]*$))?|s+d+s*$~', '', $output);

See the regex demo

Details

  • ^ – start of string
  • s* – 0+ whitespaces
  • (?:d+-(?=d[^-]*$))? – an optional sequence of
    • d+ – 1+ digits
    • - – a hyphen
    • (?=d[^-]*$) – a positive lookahead that requires a digit and then any 0+ chars other than - till the end of the string
  • | – or
  • s+ – 1+ whitespaces
  • d+ – 1+ digits
  • s* – 0+ whitespaces
  • $ – end of string.
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement