我正在尝试解决我的阵列问题,基本上我得到一个页面上的所有链接并将它们回显到屏幕上。首先,我将它们存储在一个数组中以捕获重复项并将该数组回显到屏幕上。
我要做的是删除重复的链接,但如果找到图像,我需要允许重复的链接 ,因为我需要显示图像。我不知道他们会来哪个订单,我只能假设他们会相继出现。
代码如下:
foreach($body->find('a') as $a){
$img= $a->find('img',0);//set img flag
if(!isset($links[$a->href]) && empty($img)){//check for duplicate keys and no images
$links[$a->href] = array('parent_tag'=>$a->parent()->tag,
'text'=>trim($a->plaintext),
'link'=>$href,'img'=>$img);
echo '<p><a href="'.$links[$a->href]['link'].'">'.$links[$a->href]['text'].'</a>';
}
elseif(!empty($img)){//deal with all images here
///show my image links but if it is a duplicate href it will be caught on the !isset above
}
}
只要故事没有重复两次,这意味着,这个工作正常。如果我在页面顶部有突发新闻的故事,我从代码中获取文本链接和图像但如果我走到页面的下方并且重复相同的故事和图像我只得到图像,因为文本链接是已设置但我已经说过,检查每个图像,如果图像显示它,所以我不知道如何处理这种情况,
有没有更好的方法,我似乎无法正确地思考它。
我可以有不同的排序
<a href="link1.com"><img src="myHeadlineImage.jpg"></a>
<a href="link1.com">My Headling</a>
<a href="link1.com">My Headling</a>
<a href="link1.com"><img src="myHeadlineImage.jpg"></a>
答案 0 :(得分:0)
万一有人发现这个有用,我不得不用稍微不同的逻辑重写我的代码。上述代码有效,但仅限于故事(链接和支持图像)仅出现在页面上。例如,在页面顶部我可以有一个textlink
最受欢迎
我的故事1
我的故事2
更进一步的故事是重复其支持图像,导致3个链接到同一页面,我的原始代码将在页面下方显示图像,没有任何支持文本,因此对用户不是很有用所以这里是修正案
if(!empty($img){
if(!isset($array[$a->href])) {//if not set, set it
$array[$a->href] = array('text'=>'',//important for text links
'link'=>$href,
'img_src'=>$img->src,
'img'=>$a);
elseif(isset($array[$a->href])&& empty($array[$a->href]['img'])){
$array[$a->href]['img']=$a;
$array[$a->href]['img_src']=$img->src;
}
}//end if img
elseif(empty($img)){
if(!isset($array[$a->href])) {//if not set, set it
$array[$a->href] = array('text'=>$a->plaintext,
'link'=>$a->href,
img_src=>'',
'img'=>'');
}
//it was probably set by an image first so we just add the text
elseif(isset($array[$a->href])&& empty($array[$a->href]['text'])) {
$array[$a->href]['text']=$a->plaintext;
}
}//end if (not image)
}