Вот что я пытаюсь достичь.Я импортирую XML-файл продуктов (тег продукта имеет атрибут id: в качестве примера.
В теге продукта есть 1 тег (категория), который я пытаюсь получить, но мне нужен только один экземплярпоэтому я создал флаг, чтобы помочь различать, когда идентификатор продукта меняется.
Мой код выглядит следующим образом
<?php
$flag='start';
foreach($xml->product as $product)
{
$attrs = $product->attributes();
echo "$attrs ($flag)"; // just used for testing results
if ($flag != $attrs) {
echo "| <a href='xmltest.php?menuitem=$attrs'>".$product->category." </a><br>";
$flag=$attrs;
}
}
?>
Что должно произойти при первом запуске, флаг несоответствует attrs, ссылка отображается, флаг теперь соответствует attrs.
Если у меня есть 5 тегов продукта с идентификаторами 1,1,2,2,2, код должен повторить ссылку дважды (сначалакогда $ flag = start, пока $ attrs = 1, и когда $ flag = 1, а $ attrs = 2) ...
Вместо этого он повторяет это все 5 раз, в основном игнорируя оператор if.
Я не вижу, в чем я ошибаюсь, если заявление. Может ли кто-нибудь помочь?
Обновление Спасибо, душа, я пробовал ваши предложенияи я немного ближе, чем раньше.
Я сделал var_dump и результат я вижуЭто выглядит так:
flag var_dump result: string (5) "start" attrs var_dump result: object (SimpleXMLElement) # 6 (1) {["@attributes"] => array (1){["id"] => string (1) "0"}} 0 (0)
flag var_dump result: object (SimpleXMLElement) # 6 (1) {["@attributes"] => array(1) {["id"] => string (1) "0"}}
attrs var_dump result: object (SimpleXMLElement) # 5 (1) {["@attributes"] => array (1) {["id"] => string (1) "0"}} 0 (0)
flag var_dump result: object (SimpleXMLElement) # 5 (1) {["@attributes"] => array (1) {["id"] => string (1) "0"}}
attrs var_dump result: object (SimpleXMLElement) # 4 (1) {["@attributes"] =>array (1) {["id"] => string (1) "0"}} 1 (0)
flag var_dump result: object (SimpleXMLElement) # 4 (1) {["@attributes"] => array (1) {["id"] => string (1) "0"}}
attrs var_dump result: object (SimpleXMLElement) # 8 (1) {["@attributes"]=> array (1) {["id"] => string (1) "1"}} 1 (1)
flag var_dump result: object (SimpleXMLElement) # 8 (1) {["@attributes"] => array (1) {["id"] => string (1) "1"}}
Теперь я понимаю, как$ flag var начинается со строки и затем принимает значение массива.
Я пробовал if (!is_array ($ flag) && $ flag! = $ attrs) {но результаты были одинаковыми.
Есть ли другой способ получить значения, схожие для сравнения?
Еще раз спасибо,
ОБНОВЛЕНИЕ
Простой взрыв помог решить его.Вот код, который работает для меня.
<?php
$flag='start';
foreach($xml->product as $product)
{
$category = $product->category;
$attrsvar = $product->attributes();
$attrs = explode(" ", $attrsvar);
if( ! is_array($flag) && $flag != $attrs[0]) {
echo " <a href='xmltest.php?menuitem=".$attrs[0]."'>".$category." </a> | ";
$flag=$attrs[0];
}
}
?>