Нужна помощь в анализе некоторых данных в PHP
Вопрос
Мне нужно быть в состоянии проанализировать такие данные в PHP:
Acct: 1
email : bleh@gmail.com
status : online
--------------------------------------------------
Acct: 2
email : dfgg@fgfg.com
status : banned
--------------------------------------------------
Acct: 3
signedupname : SomeUsername
somethingelse : offline
--------------------------------------------------
Как вы можете видеть, данные в значительной степени случайно. Единственное, что остается то же самое, это -----
Разделив каждую запись и Acct: 1
биты Прокладка между каждым :
Часто изменяется, как и переменная, представляющая каждый бит данных.
Я пытался пройтись и разбирать все это сам, используя Regex, но я недостаточно квалифицирован, чтобы иметь возможность сделать это должным образом. В конце этого я хочу данные в соответствии с следующим:
Acct: <integer>
var1: <string>
var2: <string>
Если это вообще имеет смысл. Это не должно быть таким эффективным, так как мне нужно делать это примерно раз в день, и я не против ждать того, как это нужно долго.
Спасибо. :)
Редактировать: Это то, что я сделал самостоятельно:
<?php
$data = file_get_contents('records.txt');
$data = explode('******** Saved Host list with acct/variables ********', $data);
$data = explode('--------------------------------------------------', $data[1]);
foreach($data as &$dataz)
{
$dataz = trim($dataz);
}
$data = str_replace('Acct:', "\nAcct:", $data);
foreach($data as $dataz)
{
preg_match('/Acct: (.*)/', $dataz, $match);
$acct = $match[1];
preg_match('/: (.*)/', $dataz, $match);
$var1 = $match[1];
echo $var1;
}
?>
Я добрался до извлечения Acct:
Часть, но что-нибудь за пределы того, что я просто не могу заставить голову.
Решение
Этот фрагмент кода примет весь ваш ввод и создаст ассоциативный массив для каждой записи в вашем вводе:
// replace ----- with actual number of dashes
foreach (explode('-----', $input) as $entry) {
$entry = trim($entry);
$record = array();
foreach (explode("\n", $entry) as $line) {
$parts = explode(':', $line);
$varname = trim($parts[0]);
$value = trim($parts[1]);
$record[$varname] = $value;
}
// Do anything you want with $record here
}
Редактировать: Я только что посмотрел на код, который вы разместили. Вам действительно не нужны регулярные выражения для того, что вы пытаетесь сделать. Regex может быть действительно удобным при использовании в нужном месте, но большую часть времени, это не правильная вещь для использования.