2016-01-10 69 views
2

我有一個陣列充滿了子陣列,而這些陣列又充滿了源名稱和它們的網站URL,如紐約時報http://newyorktimes.comforeach循環中的動態編號變量

我顯示的鏈接列表中的標題鏈接到網址,我想在每個鏈接前顯示網站的圖標 - 理論上的一個簡單的想法。

現在,鏈接列表正常工作,拉動收藏夾圖標的代碼正在返回其正確的URL,並且基本上所有的工作都正常,除了它僅適用於第一個鏈接並且此後頁面會變得混亂。我終於意識到,由於需要爲foreach循環中的每個url運行代碼,因此當循環第二次運行時必定會發生一些變量衝突。

問題是,我的列表是動態填充(在WordPress中),所以我永遠不知道數組中的鏈接數量,也不知道它們是什麼,所以我想知道的是:有沒有一種方法可以動態地編號或者每次foreach循環時改變變量,以便不存在多個相同變量的實例?

這裏是我的代碼的部分是這樣的問題:

echo '<ul class="ll_list">'; 
    foreach ($ll_entries as $ll_entry) { 

     /*----- GET FAVICON -----*/ 
     /* This code needs to run for each url in the array, pull the 
     favicon, and then the favicon's url needs to be echoed down 
     below. */ 

     $url = esc_attr($ll_entry['ll_url']); 
     $doc = new DOMDocument(); 
     $doc->strictErrorChecking = FALSE; 
     $doc->loadHTML(file_get_contents($url)); 
     $xml = simplexml_import_dom($doc); 
     $arr = $xml->xpath('//link[@rel="shortcut icon"]'); 
     $favicon = $arr[0]['href']; 

     /*-----------------------*/ 

     echo '<li class="ll_list_item">'; 

     if (file_exists($favicon)) { 
      echo '<img class="ll_logo_img" src="'.$favicon.'" alt="'. esc_attr($ll_entry['ll_title']).'" /> '; 
     } else { 
      echo '<span class="dashicons dashicons-arrow-right"></span> '; 
     } 

     echo '<a href="' . esc_attr($ll_entry['ll_url']) . '" title="Visit ' . esc_attr($ll_entry['ll_title']) . ' &raquo;" target="_blank">'; 
     echo esc_attr($ll_entry['ll_title']); 
     echo '</a>'; 
     echo '</li>'; 
    } 
echo '</ul>'; 

然後正確的變量也將不得不叫下面的<img>標記,如果圖標文件存在只回蕩......等等也許會在工程中拋出扳手?

我已經搜索了很多關於此的內容,並且發現了一些關於「變量變量」的文檔。我不完全確定如何在這裏使用它們,但是我可以用作變量的數組中沒有任何東西,除非有某種方法可以從URL中去除特殊字符並使用它。

任何幫助將不勝感激,謝謝!如果有一種更簡單的方法來實現我的目標,我就會全神貫注。

+0

你有一些錯誤(看看你的服務器/ PHP日誌)? – akmozo

+0

您提供的信息太多。這聽起來像你需要做的就是做一個for循環count(array)作爲你正在計算的數字所屬於的,或者只是在你正在使用的變量上附加一個計數。但很難說,因爲你剛剛傾銷了這麼多的信息,將其隔離得更多。 – Andrew

+0

@Shoelaced順便說一句,你發佈的代碼是好的,我測試了3個URL(NYTimes,SO和谷歌),它運行良好,所以嘗試驗證其他點... – akmozo

回答

1

如果您懷疑get_favicon代碼中存在變量命名衝突,請將其放入函數中。函數中的變量(默認情況下)是該函數的局部變量,不能混淆外部作用域。

function get_favicon($ll_entry) { 
    $url = esc_attr($ll_entry['ll_url']); 
    $doc = new DOMDocument(); 
    $doc->strictErrorChecking = FALSE; 
    $doc->loadHTML(file_get_contents($url)); 
    $xml = simplexml_import_dom($doc); 
    $arr = $xml->xpath('//link[@rel="shortcut icon"]'); 
    $favicon = $arr[0]['href']; 
    return $favicon;   
} 

然後用這個功能來填充你的$圖標變量:

$favicon = get_favicon($ll_entry); 
// use it as before 

確保您不循環定義功能。函數定義應該在你可能有的任何循環之外。

+0

哇,我剛剛花了_strangest_半小時嘗試弄清楚究竟是怎麼回事......我仍然不確定我是否知道,但我已經測試了一切,並且最終得出結論,該函數必須從我的第二個鏈接中取出某種腳本,而不是圖標,因爲沒有那個鏈接它工作。它也獲得了其中一些相對路徑,我需要絕對路徑。我會發佈一個關於如何解決這個問題的新問題,但是我會將支票給予您,因爲您回答了有關如何防止變量衝突的問題。它確實幫助瞭解它,所以謝謝! – Shoelaced