为了账号安全,请及时绑定邮箱和手机立即绑定

PHP从php文件中读取行并按顺序对它们进行分组

PHP从php文件中读取行并按顺序对它们进行分组

PHP
Smart猫小萌 2023-09-08 10:23:10
你好,我有一个 txt 文件,其中包含如下数据:ABCDEFABCDEF做记录ABCDEF做记录我所做的是逐行读取文件并生成一个包含所有行的大数组  array(7) {      [0]=>      string(3) "ABC"      [1]=>      string(3) "DEF"      [2]=>      string(3) "ABC"      [3]=>      string(3) "DEF"      [4]=>      string(3) "GHI"      [5]=>      string(3) "ABC"      [6]=>      string(3) "DEF"      [7]=>      string(3) "GHI"            .... big array not only this 7 index     }我需要的是生成一个子数组,其中包含数据 ABC、DEF 和 GHI因此,在这种情况下,该数组必须仅包含索引 2,3,4,5,6,7,因为索引 2 以 ABC 开头,但我们需要顺序 ABC DEF 和 GHI。我希望我的解释很清楚,换句话说,我需要每 3 个索引检查一次这个大数组,如果索引 0 = ABC索引 1 = DEF索引 2 = GHI 推入空数组索引 3 = ABC索引 4 = DEF索引 5 = GHI 推入空数组索引 6 = ABC // 删除它索引 7 = DEF // 删除它索引 8 = ABC索引 9 = DEF指数 10 = GHI将 8,9,10 推入空数组排除..我真的希望我能用好话解释,以便您能够理解并尝试帮助我谢谢
查看完整描述

1 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

解决方案1:在for循环中迭代数组,如果当前元素是ABC,DEF则下一个是,GHI然后将其添加到结果中。


<?php


$input = [

  'ABC', //

  'DEF', //

  'GHI', //

  'ABC',

  'DEF',

  'ABC', //

  'DEF', //

  'GHI', //

  'ABC',

  'GHI',

  'DEF',

];


// 1

$result = [];

for($i=0;$i<count($input)-2;$i++) {

  if ($input[$i] === 'ABC' && $input[$i+1] === 'DEF' && $input[$i+2] === 'GHI') {

    $result[] = $input[$i];

    $result[] = $input[$i+1];

    $result[] = $input[$i+2];

  }

}


var_dump($result);

ABCDEFGHI解决方案 2 是一个额外的好处 - 不同的方法:将此数组加载到一个长字符串中,搜索在该字符串中可以找到多少次。多次重复此字符串并将其以 3 个字符块的形式加载回数组:


// 2

$result = str_split(str_repeat('ABCDEFGHI', substr_count(implode('', $input), 'ABCDEFGHI')), 3);


var_dump($result);

输出:


array(6) {

  [0]=>

  string(3) "ABC"

  [1]=>

  string(3) "DEF"

  [2]=>

  string(3) "GHI"

  [3]=>

  string(3) "ABC"

  [4]=>

  string(3) "DEF"

  [5]=>

  string(3) "GHI"

}

array(6) {

  [0]=>

  string(3) "ABC"

  [1]=>

  string(3) "DEF"

  [2]=>

  string(3) "GHI"

  [3]=>

  string(3) "ABC"

  [4]=>

  string(3) "DEF"

  [5]=>

  string(3) "GHI"

}


查看完整回答
反对 回复 2023-09-08
  • 1 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信