【问题标题】:How to count similar words from array with strpos function of php?如何使用php的strpos函数从数组中统计相似的单词?
【发布时间】:2019-05-03 09:55:09
【问题描述】:

我正在使用 xpdf 将 pdf 转换为文本,然后借助正则表达式函数搜索 pdf 中冒号后的单词,然后使用 php 的 strpos 函数循环该数据并将它们存储到数据库中。它适用于我的单个数据。 但是对于多个相同的数据,我不知道如何将这些数据添加到数据库中。

我会一步一步地向你展示我的代码和响应:

我正在使用 xpdf 将我的 pdf 转换为以下代码的文本格式。

$text1 = (new Pdf('C:\xpdf-tools-win-4.00\bin64\pdftotext.exe'))
->setPdf($pathoffile)
->setOptions(['layout', 'layout'])
->text();
$string = $text1;

echo $string 我正在获取数据,即:

                                 In respect of Shareholders

Name:                                    xyz

Residential address:                     dublin

No of Shares:                            40

Name:                                    abc

Residential address:                     canada

No of Shares:                            2

所以,我的上述数据总共有 2 个股东。现在我想将这些数据存储在我的表中shareholders

现在,我正在使用 preg_match_all 函数将此数据转换为数组,然后存储到数据库中。

$array = array('Name','Residential address','No of Shares');
preg_match_all($regex, $string, $matches);

使用下面的函数通过 strpos() 获取数组。

function strposa($haystack, $needles=array(), $offset=0) {
        $chr = array();
        foreach($needles as $needle) {
                $res = strpos($haystack, $needle, $offset);
                if ($res !== false) $chr[$needle] = $res;
        }
        if(empty($chr)) return false;
        return min($chr);
}

if($this->strposa($text1, $array) !== false) 
                {
                    foreach ($matches as  $value) {
                        //print_r($matches);
                        $value=array_map('trim',$value);
                        $directors_info->name= $value[0];
                        $directors_info->address= $value[1];
                        $directors_info->shares= $value[2];
                      }
                }

我的print_r($matches) 数组显示了数据:

[0] => Array
        (
            [0] =>              xyz
            [1] =>              dublin
            [2] =>              40
            [3] =>              abc
            [4] =>              canada
            [5] =>              2
        )

但如果我有多个股东,那么它对我不起作用。我的预期输出是:

[0] => Array
            (
                [0] =>              xyz
                [1] =>              dublin
                [2] =>              40
                [0] =>              abc
                [1] =>              canada
                [2] =>              2
            )

我关心的是在表中分别存储 2 个数据和 2 行。如何实现这种数据。提前致谢。

【问题讨论】:

  • 你不能像最后一个数组那样有重复的键。然后你可以创建一个多维数组。
  • 是的,我知道那件事。 @Thefourthbird 但如何实现这个想法
  • 我已经添加了一个答案,你可以如何做到这一点。这对你有用吗?
  • 实际上在此之前我的数组中也有其他数据,这也将是重复的。所以在实施你的答案之前,我想解决这个问题。stackoverflow.com/questions/53572572/…

标签: arrays regex strpos pdftotext


【解决方案1】:

你不能有重复的键,所以你可以创建一个多维数组。如果每行的数据始终存在,则可以使用大小为 3 的array_chunk

$matches = array_chunk($matches,3);

这会给你:

Array
(
    [0] => Array
        (
            [0] => xyz
            [1] => dublin
            [2] => 40
        )

    [1] => Array
        (
            [0] => abc
            [1] => canada
            [2] => 2
        )

)

Demo

【讨论】:

  • 如何使用 foreach 将这些数据添加到表中,它只存储第 [0] 个索引。
  • 如果您单击演示链接,您将看到 foreach,其中每个 $value 都是一个数组,您可以使用索引 0、1 和 2 获取这些数组中的值。跨度>
  • 是的,我使用了你的代码。但它只在表中存储第 0 个索引
  • 所以你的意思是你只存储第一个数组的所有值(姓名、地址和份额)?你做了print_r($matches),你看到2个数组了吗?您何时将数据存储到数据库中?
  • stackoverflow.com/questions/53573638/… 我为此创建了新问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 2012-01-04
相关资源
最近更新 更多