Iki işaret arasındaki dizeyi

2 Cevap php

Ben iki işaret arasındaki bir dize eklemek için bir şartı var.

Başlangıçta ben kullanıyorum # DATA # ve # # END arasındaki (sunucuda saklanan bir dosya) bir acı olsun:

function getStringBetweenStrings($string,$start,$end){ 
    $startsAt=strpos($string,$start)+strlen($start);
 $endsAt=strpos($string,$end, $startsAt);
 return substr($string,$startsAt,$endsAt-$startsAt);
} 

Ben bazı işlemleri yapmak ve bazı kayıtlar için dize, sorgunun detayları dayalı. Kayıtlar varsa ben dizenin sonuna ekledim ve daha sonra sunucudaki dosya içinde # DATA # ve # # END arasındaki dize tekrar eklemek gerekiyor.

En iyi nasıl elde edebilirsiniz?

O # # END önce dosyada bir anda bir kayıt eklemek mümkün mü ya da sunucu üzerinde dize işlemek ve sadece sunucu üzerinde dosyada mevcut dize üzerinde yeniden insert için en iyisidir?

Verilerin Örnek:

AGENT_REF^ADDRESS_1^ADDRESS_2^ADDRESS_3^ADDRESS_4^TOWN^POSTCODE1^POSTCODE2^SUMMARY^DESCRIPTION^BRANCH_ID^STATUS_ID^BEDROOMS^PRICE^PROP_SUB_ID^CREATE_DATE^UPDATE_DATE^DISPLAY_ADDRESS^PUBLISHED_FLAG^LET_RENT_FREQUENCY^TRANS_TYPE_ID^NEW_HOME_FLAG^MEDIA_IMAGE_00^MEDIA_IMAGE_TEXT_00^MEDIA_IMAGE_01^MEDIA_IMAGE_TEXT_01^~

#DATA#

//Property records would appear here and match the string above, each field separated with ^ and terminating with ~

//Once the end of data has been reached, it will be fully terminated with:

#END#

Ben yeni özellikleri kontrol, ben aşağıdakileri yapın:

  1. # DATA # ve # # END arasındaki mevcut tüm özelliklerini alın
  2. Özellikleri kimliklerini almak ve bu kimlikleri eşleşmiyor yeni özellikleri sorgulamak

Daha sonra # # END ama önce dosyasındaki son özellik sonra yeni özellikler yeniden takmanız gerekir.

Dosyanın yapısı Rightmove BLM dosyasıdır.

2 Cevap

: Sadece eski ile yeni bir veri str_replace () yapmak

$str = str_replace('#DATA#'.$oldstr.'#END#', '#DATA#'.$newstr.'#END#', $str);

Ben 3 adımda veri ayıklamak olacaktır:

1) dosyasından veri Extract:

<?php
preg_match("/#DATA#(.+)#END#/s", $string, $data); 
?>

2) Her bir veri satırı Özü:

<?php
preg_match_all("/((?:.+\^){2,})~/", $data[1], $rows, PREG_PATTERN_ORDER);
// The rows with data will be stored in $rows[1]
?>

3) Her bir satırdaki verileri işlemek veya yeni satırlar ekleyin:

<?php
//Add
// Add new row to the end of the array
$data[1][] = implode('^', $newRowArray);
//Use
// Creates an array with all the data from the row '0'
$rowData = preg_split("/\^/", $data[1][0], -1, PREG_SPLIT_NO_EMPTY);

//Save the changes
//$newData should be all the rows together (with the '~' at the end of each row)
//$string is the original string with all the information
$file = preg_replace("/(#DATA#\r?\n).+(\r?\n#END#)/s", "\1".$newData."\2", $string);

Ben bu sorunun size yardımcı olabilir umuyoruz.