Я получил следующую ситуацию.
Я получил CSV-файл и некоторые данные в базе данных MySQL.
Я хочу загрузить файл CSV и сравнить его со строкой в базе данных MySQL.
Файл CSV получил следующие типы данных:
eet003 240
eet003 180
eet003 280
eet299 100
Но в базе данных данные выглядят так:
eet003
eet299
Таким образом, обе данные хранятся в массивах.
$array1
$array2
И я хочу сравнить два массива и сохранить результат в третьем массиве.
$ diff = array_diff ($ array1, $ array2)
Но я хочу только сравнить первые 6 символов данных. Так что сейчас eet003 240 отличается от eet003. Но для меня это то же самое. Мне нужен только eet003 например
Как я могу это архивировать? Теперь я использую функцию substr, но array1 создается следующим образом:
$rows = array(); //aray for csv file
$rows = file('pinesite_eet.csv', FILE_IGNORE_NEW_LINES); //write csv in array
Я не знаю, как вы вырезать строку из CSV, когда он загружается в массив.
Второй массив написан из mysql_query.
Любые предложения о том, как я мог это сделать?
Может быть проще просто изменить данные. Это удаляет пространство и все после в каждом элементе:
$rows = preg_replace('/ .*/', '', $rows);
затем array_diff()
должен работать как положено.
Я думаю, что-то вроде этого должно работать:
(Здесь я просто использую array_udiff()
с анонимной функцией, где я использую только первую часть данных файла и сравниваю ее с данными базы данных)
<?php
$result = array_udiff($fileData, $dbData, function($a, $b) {
if(strcasecmp(explode(" ", $a)[0], $b) == 0)
return 0;
return strcasecmp(explode(" ", $a)[0], $b);
});
?>