Я перебираю весь свой старый код и пытаюсь его оптимизировать. Что-то, с чем я недавно столкнулся и которое поставило меня в тупик, пытается найти решение xpath для этого:
function findit($search) {
$i=0;
foreach($xml as $page) { //loop to find specific $element based on $attribute
if($page['src']==$search) { return $i; }
$i++;
}
}
Необходимо вернуть $i
, чтобы его можно было использовать для ссылки на элемент в XML позже.
Кажется, это должно быть возможно, и я нашел несколько строк xpath, которые, похоже, должны работать, но не работают. Обычно они ссылаются на preceding-children
и подсчитывают их через функцию xpath()
, но я больше не могу найти исходные источники и не могу перевести это в строку PHP xpath.
Это вообще возможно? Или это лучше / быстрее / эффективнее, чем у меня уже есть? Предложения / решения?
РЕДАКТИРОВАТЬ: Для решения Танду
Пример моего XML-файла
<range>
<page src="attribute1" />
<page src="attribute2" />
etc...
<page src="attribut20" />
</range>
В моей текущей PHP-функции $i
всегда возвращает 0
, но должен возвращать любую найденную позицию $search
. Отредактировано так, что больше не нужно конвертировать simplexml.
function findit($search) {
$dom=new DOMDocument('1.0');
$dom->load($file);
$xpath=new DOMXPath($dom);
$i=$xpath->evaluate("count(/range/page[@src='$search']/preceding-sibling::*)");
die($dom->saveXML());
}