две строки идентичны, но не равны при сравнении - PullRequest
0 голосов
/ 11 марта 2020

У меня есть маленькая проблема, которую я не мог решить самостоятельно, я сравниваю две одинаковые строки, взятые из базы данных, а другую из текстового файла, значения всегда равны, за исключением последней

КОД ДЛЯ Массива из текстового файла

while (!feof($monfichier)) {
    $line = fgets($monfichier);
    $pieces = explode(" ", $line);
    $factureAgent[$nbb][0] = $pieces[0]; //id client
    $factureAgent[$nbb][1] = $pieces[1]; //consommation annuelle
    $factureAgent[$nbb][2] = $pieces[2]; //année
    $factureAgent[$nbb][3] = $pieces[3]; //id agent
    $month = explode(":", $pieces[4]);
    $factureAgent[$nbb][4] = $month[1]; //janvier
    $month = explode(":", $pieces[5]);
    $factureAgent[$nbb][5] = $month[1]; //fevrier
    $month = explode(":", $pieces[6]);
    $factureAgent[$nbb][6] = $month[1]; //mars
    $month = explode(":", $pieces[7]);
    $factureAgent[$nbb][7] = $month[1]; //avril
    $month = explode(":", $pieces[8]);
    $factureAgent[$nbb][8] = $month[1]; //mai
    $month = explode(":", $pieces[9]);
    $factureAgent[$nbb][9] = $month[1]; //juin
    $month = explode(":", $pieces[10]);
    $factureAgent[$nbb][10] = $month[1]; //juillet
    $month = explode(":", $pieces[11]);
    $factureAgent[$nbb][11] = $month[1]; //aout
    $month = explode(":", $pieces[12]);
    $factureAgent[$nbb][12] = $month[1]; //septembre
    $month = explode(":", $pieces[13]);
    $factureAgent[$nbb][13] = $month[1]; //octobre
    $month = explode(":", $pieces[14]);
    $factureAgent[$nbb][14] = $month[1]; //novembre
    $month = explode(":", $pieces[15]);
    $factureAgent[$nbb][15] = $month[1]; //decembre
    $nbb++;
}

ЗДЕСЬ КОД

echo "<br>".$row[0]."is".$factureAgent[$i][$nb]."<br>";
if ($année==$annéeComp[0]) {
  if ($row[0]!=$factureAgent[$i][$nb]) {
    echo "<br>".$row[0]."is".$factureAgent[$i][$nb]."<br>";
    $ok = false;
  }
  $nb++;
  $nbr++;
}

ВЫХОД

25is25
50is50
87is87
115is115
200is200
250is250
400is400
550is500
600is600
650is650
800is800
950is950
950is950

см. Изображение

ЛИНИЯ, КОТОРАЯ Я ЧИТАЮ ИЗ ТЕКСТОВОГО ФАЙЛА

1 2000 2019 1 01:25 02:50 03:87 04: 115 05: 200 06: 250 07: 400 08: 550 09: 600 10: 650 11: 800 12: 950
13 2000 2019 1 01:45 02:90 03: 150 04: 300 05: 600 06: 800 07: 1000 08: 1300 09: 1450 10: 1600 11: 1800 12: 2000

см. изображение

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Сравнение строк из разных источников может привести к неожиданным результатам.

Одна вещь, которую вы можете сделать, - привести ваши значения к тому же типу, а затем сравнить. Например:

if (intval('1') === intval('01')) ...

Таким образом, вы получаете целые две стороны, а это просто целочисленное сравнение.

Обратите внимание, что если вы приведете значение, которое является не цифра c функция всегда будет возвращать 0

0 голосов
/ 11 марта 2020

То есть, возможно, вы используете == вместо ===. я мог бы предложить использовать strcasecmp, если вы не хотите, чтобы дело рассматривалось, или использовать strcmp, если вы хотите, чтобы дело рассматривалось.

strcasecmp ()

strcmp ()

обратите внимание на сравнение результата этих функций с 0 с ===, чтобы вы были уверены, что они равны, например: if (strcmp('Hello, 'Hello') === 0) ...

Будьте внимательны при использовании == и ===

(1 == '1') //Equal -- not taking into consideration the type but just the value

(1 === '1') //Not equal -- taking into consideration the type and the value

Только для вашей информации, если вы не используете != или !==

...