PHP, cURL, strpos - Сравнение подстроки из текстового файла строка за строкой со строкой из переменной - PullRequest
0 голосов
/ 26 ноября 2018

я получаю данные с помощью cURL из базы данных и сохраняю их в переменной ($ alter).

Далее читается текстовый файл.Это делается с циклом определенное количество раз.Таким образом, строка читается из текстового файла и записывается в переменную «$ linex».Переменная "$ linex" должна затем сравниваться с переменной "$ alter. Затем происходит сравнение со второй строкой и т. Д.

Но, к сожалению, она не работает так, как описано." False "всегда выводится для каждой строки, даже если строка должна соответствовать.

Где ошибка в коде?

<?php
header('Content-type: text/html; charset=utf-8');
$User_Agent = 'Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0';

$id = $_POST["id"];
$id2 = $_POST["klass"]; 
$id3 = $_POST["element"];                   

$url2 = "https://bpk.bs.picturemaxx.com/api/v1/editing/classifications/$id2/elements";

$request_headers = [];
$request_headers[] = 'Accept: application/json';
$request_headers[] = 'charset=utf-8';
$request_headers[] = 'Content-Type: application/json; charset=utf-8';
$request_headers[] = 'Accept-Encoding:  gzip, deflate, identity';
$request_headers[] = 'Accept-Language: de,en-US;q=0.7,en;q=0.3';
$request_headers[] = 'X-picturemaxx-api-key: key';
$request_headers[] = 'Authorization: Bearer key';

$ch = curl_init($url2);
curl_setopt($ch, CURLOPT_USERAGENT, $User_Agent);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_ENCODING, "");

$result = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode($result, true);

$alternativnameze = array(); 
foreach($data['items'] as $alternativ) {
    $alternativname = $alternativ['localized'];
    $alternativnamez = $alternativname['de-de'];
    $alternativnameze[] = $alternativnamez['classification_element_name'];
}

$alter = substr(implode($alternativnameze),0 ,1000000);

$file = 'name_test.txt';
$fh = fopen($file, 'r');

if ($fh === false) {
    die('Could not open file: '.$file);
}
for ($i = 0; $i < 6; $i++) {

    $linex = fgets($fh);

    if (strpos($alter, $linex) !== false) {
        echo 'true<br />';
    } else {
        echo 'false<br />';
    }   
}

if (fclose($fh) === false) {
    die('Could not close file: '.$file);
}
?>

Пример Outoput для переменной "$ alter"

К.С. Льюис, [29.11.1898 - 22.11.1963], (Клайв Стейплс-Льюис; Клайв Стейплс Льюис; К.С. Луис; К. Гамильтон; К. С. Руису; Клайв С. Люджис; Клайв С. Люсьюнис; Клайв С.Льюис; Клайв Стейплс Льюис; Джек Льюис; К.С. Луис; Н.В. Клерк; К.С. Льюис)

Пример вывода для переменной "$ linex", которую следует сравнивать как подстроку со всей строкой "$ alter""

К.С. Льюис, [29.11.1898 - 22.11.1963]

Заранее большое спасибо за все советы и предложения по решению.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Попробуйте $linex = rtrim($linex, "\r\n"); перед сравнением, чтобы обработать дополнительные символы конца строки, которые могут быть в вашем файле.

0 голосов
/ 26 ноября 2018

fgets возвращает строку из файла с новой строкой chararcter .Поэтому, если строка в вашем текстовом файле - просто a, fgets($fh); вернет a\n (в Linux другой символ в других ОС).strpos("a b c", "a\n") всегда будет возвращать false.

A trim должен сделать трюк:

$linex = trim(fgets($fh));
...