2012-10-31 45 views
0

我想用我的XML產品進行排序和php.I想在這樣的方式,頁面上顯示
結果:避免數據重複的XML解析(PHP)

A)首先,代碼可以提取XML數據根據我的Urisegment根據字段(Code)並根據段($ id)爲我提供相關的特定產品。

B)其次,它可以在同一頁面中顯示屬於同一類別的所有產品,而不會再次顯示上述產品。

我的查詢字符串看起來是這樣的: http://myspec.com/productspec/listings/10004/EDEN%2046cmTROUGH

<? 
$list = groupBy(file_get_contents('XML/output.xml'), "WhatMoreProductSubRange"); 
$id=urldecode($this->uri->segment(4)); // URL values for WhatMoreProductSubRange 
$id2=urldecode($this->uri->segment(3)); // URL values for Code 

foreach ($list[$id] as $product) 
{ 
    if ($id2==$product->Code) 
    { 
    $subcat=$product->WhatMoreProductSubRange; 

    ?> 
     <h1><?=$product->Name?> </h1> 
<? 
    } 
    else { 
?> 
     <h2><?=$product->Name?> </h2> 
<? 
     } 
} 

?> 
<? 
    function groupBy($xml, $categoryName) { 
    $xml = new \SimpleXMLElement($xml); 
    $category = array(); 
    foreach ($xml as $row) { 
    $attr = $row->attributes(); 

    if (! isset($attr->$categoryName)) { 
     trigger_error("$categoryName does not exist in XML"); 
     break; 
    } 

    $category[(string) $attr->$categoryName][] = $attr; 
    } 
    return $category; 
} 
?> 

XML:與Output.xml

<?xml version="1.0" standalone="yes"?> 
<Rows> 
<Row Code="1002" Name="EDEN TROUGH Terracotta Blue" WhatMoreProductRange="Eden"  
WhatMoreProductSubRange="EDEN 46cmTROUGH" WhatMoreWebCategory="Garden Products" /> 
<Row Code="1003" Name="EDEN TROUGH Terracotta Black" WhatMoreProductRange="Eden"  
WhatMoreProductSubRange="EDEN 46cmTROUGH" WhatMoreWebCategory="Garden Products" /> 
<Row Code="1004" Name="EDEN TROUGH Terracotta Orange" WhatMoreProductRange="Eden"  
WhatMoreProductSubRange="EDEN 46cmTROUGH" WhatMoreWebCategory="Garden Products" /> 
<Row Code="1005" Name="EDEN TROUGH Terracotta blue" WhatMoreProductRange="Eden"  
WhatMoreProductSubRange="EDEN 46cmTROUGH" WhatMoreWebCategory="Garden Products" /> 
</Rows> 

此代碼將所有屬於該WhatMoreProductSubRange產品,但我不想產品重複(在A部分中提到)在我的產品列表中(在B部分中提到)。我沒有弄清楚如何避免重複,因爲我是新的xml文件夾仁慈地幫助我。

+0

好吧,它看起來像代碼屬性是唯一的,所以只是測試它,並跳過該行? –

+1

這似乎與XML解析沒有任何關係。只需創建一個數組,以關閉已輸出的產品。處理一行時,檢查它是否已經在數組中;如果它不在數組中,則處理該行並將產品名稱添加到數組中,否則跳過該行。 – Barmar

+0

@Barmar謝謝您的回覆。我嘗試了in_array()函數,但是不能成功。我希望你能解釋一點,因爲我是PHP編程新手。 –

回答

0

Sorted.Though效率較低,但這個工作正常。

<? 
$list = groupBy(file_get_contents('XML/output.xml'), "WhatMoreProductSubRange"); 
$id=urldecode($this->uri->segment(4)); 
$id2=$this->uri->segment(3); 
foreach ($list[$id] as $product) 
{ 
if ($id2==$product->Code) 
{ 
$subcat=$product->WhatMoreProductSubRange; 
?> 
<h1><?=$product->Name?></h1> 
<? 
} 
}  
?> 
<? 
$list = groupBy(file_get_contents('XML/output.xml'), "WhatMoreProductSubRange"); 
$id=urldecode($this->uri->segment(4)); 
$id2=$this->uri->segment(3); 
foreach ($list[$id] as $product) 
{ 
    if ($id2!=$product->Code) 
    { 
    $subcat2=$product->WhatMoreProductSubRange; 
?> 
     <h2><?=$product->Name?></h2> 
<? 
    } 
    } 
    ?>