Сравните массивы с array_diff — но только первые символы

Я получил следующую ситуацию.
Я получил 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.
Любые предложения о том, как я мог это сделать?

1

Решение

Может быть проще просто изменить данные. Это удаляет пространство и все после в каждом элементе:

$rows = preg_replace('/ .*/', '', $rows);

затем array_diff() должен работать как положено.

0

Другие решения

Я думаю, что-то вроде этого должно работать:

(Здесь я просто использую 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);
});

?>
3

По вопросам рекламы [email protected]