Как посчитать похожие слова из массива с помощью функции strpos в php?

Я использую xpdf для преобразования pdf в текст, а затем с помощью функции регулярного выражения ищу слова после двоеточия в pdf, а затем зацикливаю эти данные с помощью функции strpos php и сохраняю их в базе данных. У меня работает для отдельных данных. но для нескольких одинаковых данных я не понимаю, как добавить эти данные в базу данных.

шаг за шагом я покажу вам свой код и ответ:

Я использую 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 строками в таблице. Как добиться таких данных. заранее спасибо.


person amit sutar    schedule 01.12.2018    source источник
comment
У вас не может быть повторяющихся ключей, как в последнем массиве. Затем вы можете создать многомерный массив.   -  person The fourth bird    schedule 01.12.2018
comment
да, я знаю эту вещь. @Thefourthbird, но как этого добиться, есть идеи   -  person amit sutar    schedule 01.12.2018
comment
Я добавил ответ, как вы можете это сделать. Это работает для вас?   -  person The fourth bird    schedule 01.12.2018
comment
на самом деле до этого у меня есть и другие данные в моем массиве, и они также будут дублироваться. поэтому перед реализацией вашего ответа я хочу решить эту проблему. string" title="как написать вложенное регулярное выражение для поиска слов ниже некоторой строки"> stackoverflow.com/questions/53572572/   -  person amit sutar    schedule 01.12.2018


Ответы (1)


У вас не может быть повторяющихся ключей, поэтому вы можете создать многомерный массив. Если данные для каждой строки всегда есть, вы можете использовать array_chunk с размером 3:

$matches = array_chunk($matches,3);

Это даст вам:

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

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

)

Демо

person The fourth bird    schedule 01.12.2018
comment
как добавить эти данные в таблицу, где foreach хранит только [0]-й индекс. - person amit sutar; 01.12.2018
comment
Если вы нажмете демонстрационную ссылку, вы увидите foreach, где каждый $value является массивом, где вы можете получить значения в этих массивах, используя индекс 0, 1 и 2. - person The fourth bird; 01.12.2018
comment
да, я использовал ваш код. но он хранит только 0-й индекс в таблице - person amit sutar; 01.12.2018
comment
То есть вы имеете в виду, что сохраняете только все значения первого массива (имя, адрес и доли)? Вы сделали print_r($matches) и видите 2 массива? Когда вы сохраняете данные в базу данных? - person The fourth bird; 01.12.2018
comment
stackoverflow.com/questions/53573638/ я создаю новый вопрос для этого - person amit sutar; 01.12.2018