首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >字符串上的PHP多个子串

字符串上的PHP多个子串
EN

Stack Overflow用户
提问于 2018-09-05 09:06:14
回答 1查看 960关注 0票数 1

我有一个字符串,它为我提供了一个字符串索引。

我正在创建一个进程来读取它,我想知道是否有一个我忽略或不知道的php函数可以更容易地执行这个进程。

$data:

代码语言:javascript
复制
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:

代码语言:javascript
复制
Array (
  [0] => 15 
  [1] => 20 
  [2] => 12 
  [3] => 10
  [4] => 50
)

$data拆分为$headers数组:

代码语言:javascript
复制
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?

期望的结果:

代码语言:javascript
复制
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

    )
)                      
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-05 09:38:33

您可以创建一个像这样的函数来使用块大小进行拆分。注意:由于$fieldIndexes数组中的每个大小都不包括列之间的空格,因此我在每个长度(15+1,20+1,...)中添加了一个。

代码语言:javascript
复制
<?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));
?>

结果:

代码语言:javascript
复制
Array
(
    [0] => Invoice No..... 
    [1] => Sale Type Desc...... 
    [2] => Misc Amt.... 
    [3] => Misc Acc.. 
    [4] => Misc Acc Desc.....................................
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52175746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档