CSV — PHP: фильтрация и публикация текстового файла

У меня есть текстовый файл, который содержит фамилию, адрес, время происшествия и причину происшествия, разделенные пробелом в строке. Мне нужно отфильтровать этот файл только по тем людям, которые звонили по крайней мере два раза по одной и той же причине, и повторить его.
Я довольно новичок в PHP, поэтому я бы хотел простой способ. 🙂
Спасибо.

РЕДАКТИРОВАТЬ:
Я ничего не пробовал, так как понятия не имею, как фильтровать содержимое файла.

$data = array($_POST['surname'], $_POST['address'], $_POST['time'], $_POST['reason']);
$info = implode("   ", $data)
$info .= "\r\n";
serialize($info);
file_put_contents("data.txt", $info, FILE_APPEND);
serialize($info);

Вот как я записал это в файл.
Я взорвал файл, потому что мне нужно было разделить их на 3 пробела, но это больше не имеет значения, поэтому я могу просто сохранить массив.

Ожидаемый результат должен быть примерно таким:

Surname   Address   Time   Reason
Adams   Railroad 5   13:20   Heart Attack
Adams   Railroad 5   23:35   Heart Attack

Нужно было бы только повторить тех же людей, у которых совпадают Фамилии и Причины.

1

Решение

Обновить

Ваш текстовый файл содержит строку, записи, разделенные линейными тормозами, и значения тремя пробелами (фактически HTML-кодированными пробелами).

Здесь мы читаем весь текстовый файл, (некоторые могут сделать это линия по линии):

$whole_string = file_get_contents('data.txt');

Итак, во-первых, мы получаем каждую строку:

$entries = explode('\n',$whole_string);

Затем массивы значений передаются:

$whole_ar = array();
foreach($entries as $e){
$whole_ar[] = explode('   ',$e);
}//if 3 spaces in file are in html

Мы получаем:

array(
array(
'name','date','etc..'
),
array(
'name2','date','etc..'
),
array(
'name2','date','etc..'
)
)

Вы можете хранить массив в php-файле, для дальнейшего include('data.php'); вот так:

$file = '<?php $whole_ar='.var_export($whole_ar, TRUE)."; ?>";
file_put_contents('data.php', $file);

Основной ответ о том, как проанализировать этот массив для целевых копий, — это итерирование. или же:

$answer = array_unique(array_diff_assoc($whole_ar, array_unique( $whole_ar)));

Как я понимаю, вы получаете такую ​​информацию строка когда пользователь звонит:

$newest = "Huchinson Estonia Tallin Geo street 13 2015.12.02 13:44 Gas leak"

У вас есть эта строка в переменной, как указано выше.
Тогда вы могли бы взрываться строка за пробелом: $data = explode(" ",$newest); который дает вам массив с количеством значений. Первым значением будет фамилия, а последним — причина аварии.

Разобрать их из массива так: echo $data[0];//this will be surname а также echo end($data);//this will be accident type

Вместо эха вы можете присвоить эти значения переменным и посмотреть, присутствует ли эта фамилия И авария в вашей базе данных:

if($saved_before == $data[0].end($data)){
echo "we are working on ".end($data).", be patient, dear ".$data[0];
}

постскриптум точка (.) предназначена для объединения строк

2

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

Если я хорошо понимаю, текстовый файл является CSV-файл, который использует пробел в качестве указателя столбцов. Так что пользуйтесь fgetcsv функция для загрузки столбцов каждой строки. Укажите пробел в качестве разделителя.

0

Это должно начать вас:

function parseIt($line) { return str_getcsv($line, "   "); }
$all = array_map('parseIt', file('yourfile.txt'));
$names = array();
foreach ($all as $row) {
$uniqkey = $row[0].$row[3];
if (isset($names[$uniqkey])) {
echo implode(" ",$row);
$names[$uniqkey]++;
} else {
$names[$uniqkey] = 1;
}
}

Я заметил, что в вашем коде написания файлов вы используете разделитель из 3 пробелов, поэтому я использовал его в примере — вы можете установить его так, как хотите в str_getcsv(line, delimiter)

Объяснение:

  • Линии 1,2 — file() будет читать файл в массив, который передается через функцию parseIt() эта функция будет анализировать строку и возвращать массив значений строки.

  • Строка 3 — Массив $names будет действовать наша память, в конце она будет содержать все имена + причину в качестве ключей, а значение будет счетчиком событий.

  • Строка 4 … — проходит через $all проверяет, существует ли ключ в $names если он это делает, он печатает строку и перемещает счетчик, в противном случае устанавливает новый ключ в $names и установите его значение в 1 (счетчик).

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