PHP:如何将不同长度的数据分成

时间:2015-10-23 00:19:57

标签: php arrays split field explode

我正在从对象(OLE二进制文件)中读取数据,并且需要找到一种将数据拆分为数组或其他格式的方法,这样我就可以获得所需的一些信息。我不确定如何实现这一目标。

数据如下:

  

| some_other_delimited_data | RECORD = 1 | FIELD_1 = A | FIELD_2 = B | FIELD_3 = C | RECORD = 21 | FIELD_1 = C | FIELD_4 = d | FIELD_5 = E | RECORD = 47 | FIELD_6 = F || RECORD = 1 | FIELD_1 = G | FIELD_2 = H | RECORD = 37 | FIELD_8 = j的| FIELD_9 = K | FIELD_10 = L | RECORD = 40 | FIELD_11 = M | RECORD = 47 | FIELD_6 = N | some_more_delimited_data |

每个数据集以" RECORD = 1"开头。其中包含许多字段,后跟其他记录。这些记录中的每一个(编号2-46)可以多次出现并且具有不同数量的字段(即,RECORD = 17可以出现五次并且每个字段具有不同数量的字段)。数据集以RECORD = 47及其字段结束。 RECORD = 1和RECORD = 47之间包含一整套数据。

存在多个数据集,因此有很多" RECORD = 1" to" RECORD = 47"我需要从中获取数据的块。

每个RECORD可以有不同数量的字段。

一切都由" |"分隔符并没有似乎是流中的任何其他分隔符。

对于每个数据集,我需要得到:

  • 从RECORD = 24,来自FIELD_1的数据,其中FIELD_2 =" FOO"
  • 来自RECORD = 31,来自FIELD_1的数据,其中FIELD_2 =" BAR"

如何做到这一点?我有多个文件需要从每个包含多个数据集的数据中提取数据,因此需要相当高效。

1 个答案:

答案 0 :(得分:0)

以下是拆分字符串的想法:

$stream = "|some_other_delimited_data|RECORD=1|FIELD_1=A|FIELD_2=B|FIELD_3=C|RECORD=21|FIELD_1=C|FIELD_4=D|FIELD_5=E|RECORD=47|FIELD_6=F||RECORD=1|FIELD_1=G|FIELD_2=H|RECORD=37|FIELD_8=J|FIELD_9=K|FIELD_10=L|RECORD=40|FIELD_11=M|RECORD=47|FIELD_6=N|some_more_delimited_data|";

$matches = array();
preg_match_all ("/RECORD=([0-9]+)((\|FIELD_[0-9]+=[A-Z]+)+)/", $stream, $matches, PREG_SET_ORDER);

$array = array();
foreach ($matches as $match) {
    $submatches = array();
    preg_match_all ("/\|FIELD_([0-9]+)=([A-Z]+)/", $match[2], $submatches, PREG_SET_ORDER);
    $fields = array();
    foreach($submatches as $submatch) {
        $fields[$submatch[1]] = $submatch[2];
    }
    $array[] = array('record' => $match[1], 'fields' => $fields);
}

print_r($array);

现在应该很容易从数组中提取所需的值,使用array_keys(),array_search()和array_column()。