Разрешить 2 дублирования IP-адресов максимум php csv

У меня проблема со скриптом обработки. Я хотел бы разрешить максимум 2 дублирующихся IP-адреса в CSV-файле, чтобы предотвратить спам и учесть, что пользователь может ошибиться при заполнении формы. Кажется, я не могу правильно сослаться на переменную $ ip в скрипте, или, может быть, я чего-то упускаю. Ниже приведен фрагмент кода:

<?php
#VARIABLE DECLARATIONS (filename and post vars) GO HERE
$counter = 0;
if (file_exists($filename))
{
$file = fopen($filename, "a");
while($data = fgetcsv($filename)){
if(isset($data[$ip])){
$counter++;
continue;
if((isset($data[$ip])){
$counter++;
if($counter == 2){
echo "";
}
}
}
}
##file write goes here
}

?>

Любая помощь в этом будет оценена,

Джим

0

Решение

Сначала вам нужно будет прочитать все элементы в массиве, и только после того, как у вас будет готово число вхождений каждого IP-адреса, следует продолжить запись файла (может быть отдельный файл?).

Сначала вы можете подготовить массив с индексами IP и всеми строками, соответствующими IP, в качестве атрибутов значения этого ключа.
Это может быть сделано —

$csvArray = str_getcsv(file_get_contents('myCSVFile.csv'));

foreach($csvArray as $eachRow)
{
//prepare IP indexed array with every detail row as an attribute of the corresponding IP key.
$properlyFormattedArray[$eachRow[5]][] = $eachRow;
}

Вы получаете массив, как это —

Array(['92.27.21.171'] =>
[0] => Array("Mr","Test","davis","07972889989","01159174767","92.27.21.171"),
[1] => Array("Mr","bob","jones","07998998008","01159174767","92.27.21.171"),...
['92.27.21.172'] => ...

)

Если у вас есть этот массив, просто зациклите его и пишите только по максимуму 2 строки для каждого IP.

foreach($properlyFormattedArray as $ip => $details)
{
$count = 0;
foreach($details as $eachDetail)
{
if($count<2)
{
//write $eachDetail into file
$count++;
}
}

}

Но в этом случае порядок данных (по сравнению с вашим входным файлом) будет изменен, и дубликаты будут записаны в последовательные строки в файле CSV (не уверен, что с вами все будет в порядке).

0

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

Других решений пока нет …

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