Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何使用php的strpos函数计算数组中的相似单词?_Arrays_Regex_Strpos_Pdftotext - Fatal编程技术网

Arrays 如何使用php的strpos函数计算数组中的相似单词?

Arrays 如何使用php的strpos函数计算数组中的相似单词?,arrays,regex,strpos,pdftotext,Arrays,Regex,Strpos,Pdftotext,我使用xpdf将pdf转换为文本,然后借助正则表达式函数在pdf中对冒号后的单词进行搜索,然后使用php的strpos函数循环该数据并将其存储到数据库中。对于单个数据,这对我来说是可行的。 但对于多个相同的数据,我不知道如何将这些数据添加到数据库中 我将逐步向您展示我的代码和响应: 我正在使用xpdf将我的pdf转换成文本格式,代码如下 $text1 = (new Pdf('C:\xpdf-tools-win-4.00\bin64\pdftotext.exe')) ->setPdf($pa

我使用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名股东。现在我想将这些数据存储在我的表中

现在,我正在使用preg_match_all函数将这些数据转换为数组,然后存储到databaase中

$array = array('Name','Residential address','No of Shares');
preg_match_all($regex, $string, $matches);
使用下面的函数获取具有strpo的阵列

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$匹配数组向我显示数据:

[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
            )

我关心的是在表中用两行分别存储两个数据。如何实现这类数据。提前谢谢

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

$matches = array_chunk($matches,3);
这将给你:

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

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

)

不能像上一个数组中那样有重复的键。然后你可以创建一个多维数组。是的,我知道@第四只鸟,但如何实现这一点任何想法我都添加了一个答案,你可以如何做到这一点。这对你有用吗?事实上,在此之前,我的数组中还有其他数据,这些数据也会重复。因此,在实现您的答案之前,我想解决这个问题。如何使用foreach在表中添加此数据,它只存储第[0]个索引。如果单击演示链接,您将看到foreach,其中每个$value都是一个数组,您可以使用索引0、1和2来获取这些数组中的值。是的,我使用了您的代码。但是它在表中只存储第0个索引,所以您的意思是只存储第一个数组名称、地址和共享的所有值?您是否打印了r$matches,是否看到2个数组?何时将数据存储到数据库?我为此提出了一个新问题