我有一个字符串,它为我提供了一个字符串索引。
我正在创建一个进程来读取它,我想知道是否有一个我忽略或不知道的php函数可以更容易地执行这个进程。
$data:
Invoice No..... Sale Type Desc...... Misc Amt.... Misc Acc.. Misc Acc Desc.....................................
FOCF219611 CUSTOMER -0.02 8050 TOOLS & SUPPLIES - SERVICE
FOCF219669 CUSTOMER -14.49 8050 TOOLS & SUPPLIES - SERVICE
$fieldIndexes:
Array (
[0] => 15
[1] => 20
[2] => 12
[3] => 10
[4] => 50
)
将$data
拆分为$headers
数组:
array_push($headers, substr($data, 0, $fieldIndexes[0]));
array_push($headers, substr($data, $fieldIndexes[0], $fieldIndexes[1]));
array_push($headers, substr($data, $fieldIndexes[1], $fieldIndexes[2]));
array_push($headers, substr($data, $fieldIndexes[2], $fieldIndexes[3]));
array_push($headers, substr($data, $fieldIndexes[3], $fieldIndexes[4]));
有没有一个函数可以删除字符串的类似字符串的array_shift
的一部分?我在想,我可以循环$fieldIndexes
,从字符串的开头提取第一个长度,依此类推,直到字符串为空,并将其压缩为3行,并使其可移植到任何数量的fieldIndexes?
期望的结果:
Array
(
[HEADERS] => Array
(
[0] => Invoice No
[1] => Sale Type Desc
[2] => Misc Amt
[3] => Misc Acc
[4] => Misc Acc Desc
)
[1] => Array
(
[Invoice No] => FOCF219611
[Sale Type Desc] => CUSTOMER
[Misc Amt] => -0.02
[Misc Acc] => 8050
[Misc Acc Desc] => TOOLS & SUPPLIES - SERVICE
)
)
发布于 2018-09-05 09:38:33
您可以创建一个像这样的函数来使用块大小进行拆分。注意:由于$fieldIndexes
数组中的每个大小都不包括列之间的空格,因此我在每个长度(15+1,20+1,...)中添加了一个。
<?php
$headerString ="Invoice No..... Sale Type Desc...... Misc Amt.... Misc Acc.. Misc Acc Desc.....................................";
$fieldIndexes = [ 15+1, 20+1, 12+1, 10+1, 50+1];
function getParts($string, $positions){
$parts = array();
foreach ($positions as $position){
$parts[] = substr($string, 0, $position);
$string = substr($string, $position);
}
return $parts;
}
print_r(getParts($headerString, $fieldIndexes));
?>
结果:
Array
(
[0] => Invoice No.....
[1] => Sale Type Desc......
[2] => Misc Amt....
[3] => Misc Acc..
[4] => Misc Acc Desc.....................................
)
https://stackoverflow.com/questions/52175746
复制相似问题