我需要在两个标记之间插入一个字符串。
最初我在#DATA#和#END#之间使用:
得到一个刺激(来自存储在服务器上的文件)function getStringBetweenStrings($string,$start,$end){
$startsAt=strpos($string,$start)+strlen($start);
$endsAt=strpos($string,$end, $startsAt);
return substr($string,$startsAt,$endsAt-$startsAt);
}
我做了一些处理并根据字符串的细节,查询了一些记录。如果有记录,我需要能够将它们附加到字符串的末尾,然后在服务器上的文件中重新插入#DATA#和#END#之间的字符串。
我怎样才能最好地实现这一目标?
是否可以在#END#之前一次在文件中插入一条记录,或者最好是在服务器上操作字符串,只是重新插入服务器上文件中的现有字符串?
数据示例:
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#
当我检查新属性时,我会执行以下操作:
然后我需要在#END#之前重新插入新属性,但是在文件中的最后一个属性之后。
该文件的结构是Rightmove BLM文件。
答案 0 :(得分:0)
使用new:
执行旧数据的str_replace()$str = str_replace('#DATA#'.$oldstr.'#END#', '#DATA#'.$newstr.'#END#', $str);
答案 1 :(得分:0)
我会分三步提取数据:
1)从文件中提取数据:
<?php
preg_match("/#DATA#(.+)#END#/s", $string, $data);
?>
2)提取每一行数据:
<?php
preg_match_all("/((?:.+\^){2,})~/", $data[1], $rows, PREG_PATTERN_ORDER);
// The rows with data will be stored in $rows[1]
?>
3)操纵每行中的数据或添加新行:
<?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);
我希望这可以帮助你解决问题。