2011-06-04 196 views
2

您好我有一個使用此函數從XML文件創建的數組。刪除數組中的重複項

# LOCATIONS XML HANDLER 
#creates array holding values of field selected from XML string $xml 
# @param string $xml 
# @parm string $field_selection 
# return array 
# 
function locations_xml_handler($xml,$field_selection){ 

    # Init return array 
    $return = array(); 
    # Load XML file into SimpleXML object 
    $xml_obj = simplexml_load_string($xml); 
    # Loop through each location and add data 

    foreach($xml_obj->LocationsData[0]->Location as $location){ 
    $return[] = array("Name" =>$location ->$field_selection,); 
    } 
    # Return array of locations 

    return $return; 

} 

我該如何停止獲取重複值或從數組中刪除一旦創建?

+0

爲什麼你做一個二維數組?你可以做'$ return [] = $ location - > $ field_selection'。 – Midas 2011-06-04 17:01:48

回答

3

你可以簡單地調用之後array_unique

$return = array_unique($return); 

但要注意:

注意:有兩個因素被認爲是平等的,當且僅當(string) $elem1 === (string) $elem2。用詞表示:當字符串表示是相同的。第一個元素將被使用。

或者,而不是刪除重複,你可以使用名稱的附加陣列,並使用PHP的數組鍵的唯一性,以避免在首位重複:

$index = array(); 
foreach ($xml_obj->LocationsData[0]->Location as $location) { 
    if (!array_key_exists($location->$field_selection, $index)) { 
     $return[] = array("Name" => $location->$field_selection,); 
     $index[$location->$field_selection] = true; 
    } 
} 

但如果你的名字是不是字符串可比較的,你需要一種不同的方法。

+0

非常感謝Gumbo,由於所有名爲「Name」的索引似乎都不起作用。試過比較這些值,但是作爲對象和指針,即使值相同,它們也是不同的! – WallyJohn 2011-06-06 10:59:12