У меня есть два файла CSV с именем whatineed.csv/all.csv, и я хочу распечатать данные только тогда, когда они существуют в обоих файлах.
Я пробовал некоторые функции, но ничего не дает мне нужного результата.
Заранее спасибо
whatineed.csv got:
Array
(
[0] => 0424
[1] => 9007382026
)
Array
(
[0] => 15043
[1] => 90073225
)
Array
(
[0] => 15043-3
[1] => 900735226
)
all.csv
Array
(
[0] => 0424
[1] => Text
[2] => Text
[3] => Text
[4] => Text
[5] => 9007382026
)
Array
(
[0] => 456456
[1] => Text
[2] => Text
[3] => Text
[4] => Text
[5] => 486424
)
Array
(
[0] => 15043-3
[1] => Text
[2] => Text
[3] => Text
[4] => Text
[5] => 900735226
)
Я пытался использовать in_array
$sourceall = all.csv;
$sourceneed = whatineed.csv;
if (($handle1 = fopen($sourceall, "r")) !== FALSE && ($handle = fopen($sourceneed, "r")) !== FALSE) {
while (($data1 = fgetcsv($handle1, 0, "|")) !== FALSE && ($data = fgetcsv($handle, 0, "|")) !== FALSE) {
if (in_array($data[$mainInfo[2]], array_column($data1, $data1[$mainInfo1[5]]))) {
print_r($data1);
}
// another one
if (in_array($data[$mainInfo[0]], $data1)){
print_r($data1);
}
}
}
Вот что я хочу распечатать
Array
(
[0] => 0424
[1] => Text
[2] => Text
[3] => Text
[4] => Text
[5] => 9007382026
)
Array
(
[0] => 15043-3
[1] => Text
[2] => Text
[3] => Text
[4] => Text
[5] => 900735226
)
потому что элементы массива из whatineed.csv существуют в all.csv






Вы можете использовать некоторые комбинации столбец_массива и array_intersect_key следующим образом:
$temp = array_column($a1, null, 0); // considers 0 as key and null means whole array as value
$temp1 = array_column($a2, null, 0);
$temp2 = array_intersect_key($temp1, $temp); // array_intersection based on matching key
Создайте $a1 и $a2 из whatineed.csv и all.csv соответственно. Затем передайте эти два массива в приведенный выше фрагмент, он будет работать.
@quickSwamp, когда я читаю CSV-файлы, каждая строка представляет собой отдельный массив, как вы объединили разные массивы в один массив, например $a1 и $a2 в демонстрационной ссылке?
В цикле foreach выполните $a1[] = $val вашего цикла foreach
$a1 = 220 строк $a2 = 5000 строк в моем коде $temp2 печатает строки первый 220, а не строки, которые находятся в $a1 и $a2
Вы сопоставляете записи из $a1 и $a2, верно? при пересечении двух массивов вы получите равный или меньший небольшой массив.
теперь он работает, но возвращает только 1 запись как и массив
Сравните мой массив в демо-ссылке с вашим и проверьте
большое спасибо, все сработало, это была моя ошибка, не сработало с самого начала.
Попробуйте сравнить массивы с помощью array_diff();