Общая сортировка XML-документа (анализируется по симплексному файлу_загрузки) с использованием usort - PullRequest
0 голосов
/ 19 марта 2011

У меня есть следующий XML-документ:

<?xml version="1.0" encoding="utf-8"?>
<entries>
  <entry>
    <name>Test</name>
    <ext>2</ext>
  </entry>
  <entry>
    <name>Test 2</name>
    <ext>1</ext>
  </entry>
</entries>

Я разбираю это с

$xml_data = simplexml_load_file("doc.xml");

Затем я хочу отсортировать записи (entry-Elements) структуры данных:

function sort($key, $dir, $type)
{
    $srt = create_function('$e1,$e2', '
                          $type = "' . $type . '";
                          $dir  = "' . $dir . '";
                  $key  = "' . $key . '";

                                  if($type == "text")
                           return strcmp($e1->$key, $e2->$key);
                  else if($type == "int")
                  {
                       if((int) $e1->$key == (int) $e2->$key)
                               return 0;
                           else
                               return ((int) $e1->$key < (int) $e2->$key) ? -1 : 1;
                  }
                  else
                  {
                      error_log("Unknown sort type!", 0);
                      return 0;
                                  }
    ');

    usort($xml_data->entry, $srt);
}

Пример вызова выглядит так:

sort('name', 'ASC', 'text'); // sort order not implemented yet

но это не работает, потому что массив, кажется, первая запись, а не запись-массив Итак, я посмотрел, что говорит printr:

printr($xml_data);

говорит:

SimpleXMLElement Object
(
    [entry] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [name] => Test
                    [ext] => 2
                )

            [1] => SimpleXMLElement Object
                (
                    [name] => Test 2
                    [ext] => 1
                )
        )
)

Проблема в том, как мне позвонить usort.

usort($xml_data->entry, $srt);

кажется неправильным, но это была моя интерпретация результата.

Кто-нибудь может дать мне подсказку или решение моей проблемы?

Спасибо!

1 Ответ

0 голосов
/ 12 апреля 2011

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

...