【问题标题】:Searching for values in a PHP array that start with a specific word在 PHP 数组中搜索以特定单词开头的值
【发布时间】:2018-06-17 11:30:51
【问题描述】:

我正在将一个文本文件加载到一个数组中:

<?php

$filename = "data.txt";

$array = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

?>

该文件包含以“数据”一词开头的某些行。这些行作为单独的值加载到数组中。

我想做的是只从数组中提取那些值并将它们保存为一个单独的文件,每个文件都在一个新行上。

我将如何在数组中搜索这些特定值并执行上述操作?

【问题讨论】:

  • 不能不使用数据库吗?也许您需要文件,但这听起来确实像是数据库的工作。或者,如果您必须使用文件,请尝试使用更易于处理和提取数据的结构,例如 XML

标签: php arrays search word


【解决方案1】:

当您在数组中有文件的行时,您会被困在遍历数组(行)并检查行是否以 Data (0 === mb_strpos($line, 'Data')) 开头。如果是这样,您只需使用 fwrite() 将该行保存到另一个文件。

或者你可以在控制台中运行grep

grep '^Data' input.txt > output.txt

【讨论】:

    【解决方案2】:

    如果您有一个数组,您可以使用函数 array_filter 过滤值。 http://php.net/manual/en/function.array-filter.php 如果您想将元素保留在数组上,回调函数必须返回 true,如果您想取消设置它,则必须返回 false,例如因为该元素不同,那么您正在寻找。 您必须检查内部功能是否有您要查找的单词。

    使用 preg_match 检查元素和正则表达式的值。 http://php.net/manual/en/function.preg-match.php

    测试正则表达式的有用链接: https://regex101.com/

    简单!

    例子:

    <?php
        $arrayData = [
            'DATA: something',
            'DATA: carrot',
            'DATA: coffee',
            'Mercedes-Benz C32 AMG',
            'DATA: hot coffee'
        ];
        function checkArray($value){
            $re = '/^DATA:(.*)coffee(.*)/m';
            if (preg_match($re, $value)) {
                return true;
            } else {
                return false;
            }
        }
        $filtered = array_filter($arrayData, 'checkArray');
        var_dump($fitlered);
    

    【讨论】:

      【解决方案3】:

      以下代码将提取所有以“Data”开头的行(区分大小写)并将它们附加到文件“data_rows.txt”中。

      $filename = "data.txt";
      $array = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
      
      foreach( $array as $item ) {
          if( strpos($item, "Data") === 0 ) {
              file_put_contents("data_rows.txt", "{$item}\n", FILE_APPEND);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2019-12-29
        • 2022-01-04
        • 2012-03-05
        • 2016-07-14
        • 1970-01-01
        • 1970-01-01
        • 2011-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多