У меня есть следующий 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);
кажется неправильным, но это была моя интерпретация результата.
Кто-нибудь может дать мне подсказку или решение моей проблемы?
Спасибо!