Какой самый простой для анализа формат PHP? - PullRequest
0 голосов
/ 28 мая 2009

В моем PHP-файле я считываю большую часть информации, используя запрос, как показано ниже:

SELECT  GROUP_CONCAT(CONCAT('<comment><body><![CDATA[',body,']]></body>','<replier>',if(screen_name is not null and !anonymous,screen_name,''),'</replier>','<created>',created,'</created></comment>') SEPARATOR '')
                        FROM   idiscussion
                        LEFT JOIN
                               users
                        ON     idiscussion.uid=users.id
                        WHERE  idiscussion.iask_id = 1

да, это похоже на формат xml, но, кажется, разобрать в PHP не так просто,

Любая рекомендация о том, какой формат использовать для последующего простого разбора?

КАК для меня мне нужно объединить их все вместе,

Вы можете подумать об этом случае: чтобы получить 1 тему и обсуждения по этой теме одновременно. 1 тема соответствует нескольким дискуссиям. Как вы можете сделать это за 1 запрос, не объединяя его вместе?

Ответы [ 4 ]

2 голосов
/ 28 мая 2009

Если вы получаете данные из базы данных SQL, гораздо проще не использовать SQL для того, чтобы замочить их в каком-либо текстовом формате, а вместо этого выполнить обычный запрос и использовать функции SQL для работы с полученными вами результатами. данные.

Если вам в конечном итоге потребуется сериализация данных для других клиентов PHP, я бы порекомендовал Стандартный формат сериализации PHP .

0 голосов
/ 28 мая 2009

Могу я спросить, почему вы не просто извлекаете данные без объединения их всех вместе?

SELECT body,
       IF(screen_name IS NOT NULL AND !anonymous, screen_name, '') AS replier,
       created
FROM   idiscussion
LEFT JOIN
       users
ON     idiscussion.uid = users.id
WHERE  idiscussion.iask_id = 1

Это должно выполняться так же быстро, как ваш исходный запрос, и вы можете получить доступ к его данным, как и к любому другому набору результатов. Предполагая, что вы используете MySQL и не используете PDO:

$result = mysql_query($sql);
if ($result) {
    while ($row = mysql_fetch_assoc($result)) {
        // $row is an associative array containing the current row's data.
    }
}

Если вам нужно создать XML, но вы хотите получить доступ к данным в необработанном виде, просто создайте их в PHP.

$xml =
    '<comment>' .
         '<body><![CDATA[' . $row['body'] . ']]></body>' .
         '<replier>' . $row['replier'] . '</replier>' .
         '<created>' . $row['created'] . '</created>' .
    '</comment>';

Вам может потребоваться экранировать данные, если они еще не были очищены. Вы также можете использовать XML-конструктор, такой как XMLWriter , хотя это выходит за рамки этого вопроса.

0 голосов
/ 28 мая 2009

Вы можете использовать DOM или SimpleXML для анализа XML-файлов, но также JSON или YAML . Все они довольно просты в использовании, так как вы можете положиться на высокоуровневые парсеры для PHP. Они имеют свои преимущества и недостатки в зависимости от того, как вы хотите использовать формат.

0 голосов
/ 28 мая 2009

Зависит от структуры данных, но список значений можно легко сохранить как список записей, разделенных точкой с запятой, с помощью join (), а затем легко проанализировать с помощью split ().

Это чрезвычайно просто, но может не подойти для чуть более сложных данных.

Ответ на комментарий: если данные содержат точку с запятой, их необходимо экранировать соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...