У меня есть текстовый файл, который содержит фамилию, адрес, время происшествия и причину происшествия, разделенные пробелом в строке. Мне нужно отфильтровать этот файл только по тем людям, которые звонили по крайней мере два раза по одной и той же причине, и повторить его.
Я довольно новичок в 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
Нужно было бы только повторить тех же людей, у которых совпадают Фамилии и Причины.
Обновить
Ваш текстовый файл содержит строку, записи, разделенные линейными тормозами, и значения тремя пробелами (фактически 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];
}
постскриптум точка (.) предназначена для объединения строк
Если я хорошо понимаю, текстовый файл является CSV-файл, который использует пробел в качестве указателя столбцов. Так что пользуйтесь fgetcsv функция для загрузки столбцов каждой строки. Укажите пробел в качестве разделителя.
Это должно начать вас:
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 (счетчик).