【问题标题】:Php reading line from a php file and group them by orderphp 从 php 文件中读取行并按顺序对它们进行分组
【发布时间】:2020-11-18 07:37:54
【问题描述】:

您好,我有一个包含如下数据的 txt 文件:

  • ABC
  • DEF
  • ABC
  • DEF
  • GHI
  • ABC
  • DEF
  • GHI

我所做的是逐行读取文件并生成一个大数组 其中包含所有行

    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 推入空数组

exc ..

我真的希望我用好话解释,以便您理解并尝试帮助我

谢谢

【问题讨论】:

  • 我只需要弄清楚如何开始。感谢您的每一种帮助。
  • 如果要推送,请使用带有索引的 foreach 循环。 foreach (array_expression as $key => $value) 键是索引,值是数组中的任何内容。使用它来构建一个基于过滤掉索引位置和返回值的新数组。
  • 你能输入你想要得到的输出吗?你的解释不是很清楚。
  • 欢迎来到Stack Overflow。请获取该站点的tour,阅读How to Ask 以及如何创建minimal reproducible example。然后回到您的问题并重新制定它(最好使用代码示例、提供的输入和预期的输出)以获得(有用的)答案。在发布问题之前,search 该网站并确保尚未回答类似的问题。展示您尝试过的方法以及遇到困难的地方,以最大限度地获得帮助。
  • 请澄清应该是什么的标准 1. 丢弃,2. 推送到第二个数组,为什么?另外,其余的应该只是唯一值吗?另外,索引(行)号重要吗?此外,根据您的输入样本,提供预期输出的完整样本。

标签: php


【解决方案1】:

解决方案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);

解决方案 2 是一种单线奖励 - 不同的方法: 将此数组加载到一个长字符串中,在该字符串中搜索ABCDEFGHI 可以找到多少次。多次重复此字符串并将其以 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"
}

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 2022-01-03
    • 2010-12-12
    • 2011-09-21
    • 2017-05-10
    相关资源
    最近更新 更多