2016-01-10 27 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