У меня есть файл с этой структурой:Распознавать массив или строку с регулярным выражением?
[25-02-2016 16:55:09.497203] [exception] SQLSTATE[42S02]: Base table or
view not found: 1146 Table 'test.pdd_userss' doesn't exist
0: array(
'Stack' => 'exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.pdd_userss' doesn't exist' in C:\Bitnami\wampstack-5.5.29-1\apache2\htdocs\api\v1\boot\core\database.php:57
Stack trace:
#0 C:\Bitnami\wampstack-5.5.29-1\apache2\htdocs\api\v1\boot\core\database.php(57): PDO->prepare('SELECT * FROM p...')
#1 C:\Bitnami\wampstack-5.5.29-1\apache2\htdocs\api\v1\boot\models\tests_model.php(31): Database->select('SELECT * FROM p...')
#2 C:\Bitnami\wampstack-5.5.29-1\apache2\htdocs\api\v1\boot\controllers\test.php(43): Tests_Model->selectData()
#3 C:\Bitnami\wampstack-5.5.29-1\apache2\htdocs\api\v1\boot\core\router.php(158): Test->selectUser()
#4 C:\Bitnami\wampstack-5.5.29-1\apache2\htdocs\api\v1\boot\core\map.php(52): Router->submit()
#5 C:\Bitnami\wampstack-5.5.29-1\apache2\htdocs\api\v1\boot\system\api.php(107): Map->init_get()
#6 C:\Bitnami\wampstack-5.5.29-1\apache2\htdocs\api\v1\boot\boot.php(21): Api->init()
#7 C:\Bitnami\wampstack-5.5.29-1\apache2\htdocs\api\v1\index.php(18): Boot->__construct()
#8 {main}',
'ID' => 'john foo'
)
[25-02-2016 16:55:09.497857] [info] Sistema executed.
0: array(
'ID' => 'john foo'
)
[25-02-2016 16:55:13.255716] [info] System done.
Теперь в течение первых двух случаев у меня нетых проблем для десериализации структуры как последуйте (первый два следа) третий след не распечатанный я ставлю это в пример является структура, которую я хочу достичь:
{
"trace": [2]
0: {
"date": "25-02-2016 17:02:31.830305"
"type": "exception"
"message": "SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.pdd_userss' doesn't exist"
"ID": "" <- THE ID ISN'T DISPLAYED
}-
1: {
"date": "25-02-2016 17:02:31.831140"
"type": "info"
"message": "system done."
"ID": "john foo"
}-
-
.... OTHER CONTENT
}
но отображается «вызвать regex
не десериализации данных для error
ничего. Это мой код:
$fh = file_get_contents($file);
if(!$fh) { throw new Exception("Not found"); }
$content = array();
$content["trace"] = array();
preg_match_all('/\[(.*)\][\s]*?\[(.*?)\][\s]*?(.*)[\s.]+(?:\d+[^\']*\'ID\'[ ]*=>[ ]*\'(.*)\')?/',
$fh, $regs, PREG_PATTERN_ORDER);
for($i = 0; $i < count($regs[0]); $i++)
{
$content['trace'][] = array(
'date' => $regs[1][$i],
'type' => trim($regs[2][$i]),
'message' => trim($regs[3][$i]),
'ID' => trim($regs[4][$i]),
);
}
return $content;
Как вы можете видеть, что в первом случае у меня есть массив как это:
0: array(
'ID' => 'john foo'
)
и Infact идентификатор отображается правильно, но в во втором случае у меня есть простая строка: 'ID' => 'john foo'
строка не отображается, так как я могу распознать этот два случая?
Извините за введение, но я думаю, что и с вашим состоянием проблема не исправлена .. Регулярное задание – Dillinger
обновленный ответ! – SoWizardly
Проблема заключается в регулярном выражении не в 'array' – Sandokan