2012-04-02 83 views
1

這是我想要實現的。 我進口產品的XML文件(產品標籤有一個id屬性: 作爲一個例子xml foreach跳過如果在php語句

還有就是我想檢索產品標籤內1個標籤(類別),但我只想要一個實例它。所以我創建了一個標誌,以幫助區分當產品ID的變化。

我的代碼看起來像這樣

<?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個ID爲1,1,2,2,2的產品標籤,代碼應該兩次回顯鏈接(首先當$ flag = start,而$ attrs = 1時,以及$ flag = 1 while $ attrs = 2)...

相反,它回聲5次,基本上忽略if語句。

我看不到if語句出錯的地方。誰能幫忙?

更新感謝花灑,我一直在努力您的建議,我比以前更近一點。

我做的var_dump,結果我看到這個樣子的

標誌的var_dump的結果:string(5) 「開始」 ATTRS的var_dump結果:對象(的SimpleXMLElement)#6(1){[ 「@屬性」] =>數組(1){ [ 「ID」] =>串(1) 「0」}} 0(0)

標誌的var_dump結果:對象(的SimpleXMLElement)#6(1) {[「@attributes」] => array(1){ [「id」] => string(1)「0」}}

attrs var_dump result:object (0)

flag var_dump result:#5(1){[「@attributes」] =>數組(1){var id_dump結果:對象(SimpleXMLElement)#5(1){[「@attributes」] =>數組(1){ [「id」] => string(1)「0」}}

attrs var_dump result:object (0)

flag var_dump result:#4(1){[「@attributes」] =>數組(1){「id」] => string(1)「0」}} 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)

標誌的var_dump結果:對象(的SimpleXMLElement)#8(1){[ 「@屬性」] =>數組(1){ [ 「ID」] =>串(1) 「1」}}

我現在明白了$ flag var作爲一個字符串開始,然後採用數組的值。

我試過如果(!is_array($ flag)& & $ flag!= $ attrs){但結果是一樣的。

有沒有另一種方法可以讓我的值比較類似?再次

感謝,

UPDATE

一個簡單的爆炸幫助解決這個問題。這是爲我工作的代碼。

<?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]; 
    } 
} 
?> 

回答

0

您將要確保它不是第一個數組。

if(! is_array($flag) && $flag != $attrs) { etc... } 

那應該是這樣,對不起,如果你在我編輯它之前正在閱讀第一篇文章。我完全誤解了你的問題。現在應該這樣工作的原因是因爲你最初試圖將數組與一個字符串進行比較,這可能會導致無聲錯誤。

編輯:如果它仍然沒有工作嘗試var_dump()來確保兩個變量在比較時是相同的類型。

更新:你知道嗎,我們都在想這個。我會假設你正在用這個XML做一些事情,除了獲取類別之外,否則你可以看看下面更簡單的XPATH解決方案。如果您正在使用此XML進行更多操作,則可以執行以下操作。

$products = array(); 
foreach($xml->product as $product) { 
    $id = $product['id']; 
    $category = $product->category; 

    if(! in_array($id, $products)) { 
     $products[$id] = $category; 
     echo "| <a href='xmltest.php?menuitem=$attrs'>".$category." </a><br>"; 

    } 
} 

XPATH for if you just want to use with categories。讓我知道,如果我的XPATH不太正確,在正常情況下我不太好,我不想在睡眠不足的情況下,我可以多麼糟糕地將它破壞。

$categories = $xml->xpath('//product/category'); 
$categories = array_unique($categories); 
foreach($categories as $category) { 
    echo "| <a href='xmltest.php?menuitem=$attrs'>".$category." </a><br>"; 
} 
+0

如果我可以投票,我會。我還沒有足夠的代表 – 2012-04-03 14:53:24

+0

我將你標記爲正確的答案,因爲它確切地指導了我需要完成代碼的位置。你真棒淋浴頭! :) – 2012-04-03 15:16:13

+0

非常感謝,看看更多的想法:) – mseancole 2012-04-03 15:31:26