使用php从文本文件中提取多个(~40个值)的最佳方法是什么?
数据或多或少像:
NAMEA valuea
NAMEB valueb
我正在寻找一种正确的方法来将这些数据提取到数据结构中,因为我需要为所有数据指定正则表达式(全部40个)。
我清楚了吗?
*意思是,默认/痛苦的方法将由我来做:
$namea = extractfunction("regexa", $textfilevalue);
$nameb = extractfunction("regeb", $textfilevalue);
...... 40次!
这些行可能不是相同的顺序,也不会出现在每个文件中。每个NAMEA都是这样的文本:“注册号码:”或“申请人姓名:”(即,我称之为NAMEA的空格)
对Col。
的回应我正在寻找一种合理的编写代码的“方式”,因此它可读,可修改,构建一个易于调用的对象/数组等......“良好的编码风格!” :)
@Adam - 他们确实......并且还包含斜杠......
@Alix - 吓坏了!那很好!您是否也碰巧对如何通过删除“key_x”以及其他内容中的所有内容来“截断”rsultant数组有任何见解?我应该把它打开作为一个新问题吗?
答案 0 :(得分:1)
以下是我的看法:
<强> somefile.txt:强>
NAMEA valuea
NAMEB valueb
PHP代码:
$file = file_get_contents('./somefile.txt');
$string = preg_replace('~^(.+?)\s+(.+?)$~m', '$1=$2', $file);
$string = str_replace(array("\r\n", "\r", "\n"), '&', $string);
$result = array();
parse_str($string, $result);
echo '<pre>';
print_r($result);
echo '</pre>';
<强>输出:强>
Array
(
[NAMEA] => valuea
[NAMEB] => valueb
)
您还可以在PHP 5.3 +上使用str_getcsv()
进一步简化此操作。
编辑:对于有@Col空格的键,我以前的版本失败了。弹片注意到了。我没有足够的注意力阅读这个问题。一个可能的解决方案,因为您似乎使用了始终附加:
的密钥是:
$string = preg_replace('~^(.+?):\s+(.+?)$~m', '$1=$2', $file);
要删除从key_x
到文件末尾的所有内容,您可以执行以下操作:
$string = substr($string, 0, strpos($string, 'key_x'));
所以整件事情看起来像这样:
<强> somefile.txt:强>
Registration Number: valuea
Applicant Name: valueb
PHP代码:
$file = file_get_contents('./somefile.txt');
$string = substr($file, 0, strpos($file, 'key_x'));
$string = preg_replace('~^(.+?):\s+(.+?)$~m', '$1=$2', $string);
$string = str_replace(array("\r\n", "\r", "\n"), '&', $string);
$result = array();
parse_str($string, $result);
echo '<pre>';
print_r($result);
echo '</pre>';
<强>输出:强>
Array
(
[Registration_Number] => valuea
[Applicant_Name] => valueb
)
答案 1 :(得分:0)
据我所知,你可以使用file()获取一个字符串数组,然后用一些正则表达式解析这些字符串。
如果在名称和值之间添加=符号,您可以使用parse_ini_file()
立即获取整个内容答案 2 :(得分:0)
假设您的密钥(名称,名称)中没有空格:
$contents = file('some_file.txt'); // read file as array
$data = array();
foreach($contents as $line) { // iterate over file
preg_match('/^([^\s]+)\s+(.*)/', $line, $matches); // pull out key and value into $matches
$key = $matches[1];
$value = $matches[2];
$data[$key] = $value; // store key/value pairs in $data array
}
var_dump($data); // what did we get?