PHP处理重复元素

时间:2013-02-11 23:23:42

标签: php domdocument

我的图片存在问题。

我尝试在用户点击图片时添加图片ID,ID将保存到DB。

当页面重新加载时,具有id属性的图像将在img标记中显示id。

我识别具有id属性的图像的方式基于图像src。 但是,我发现有很多重复的图像,我的代码会添加一个id属性 所有重复的图像。

我希望只将id属性添加到用户点击的图片中。

我的代码

this.id是图像的新id属性,它是从DB生成的。

//click image codes....
//assign the id to the clicked image (not all duplicated images)
this.img.attr('id',this.id);
页面重新加载时

...

 $doc = new DOMDocument();
 $doc->loadHTML($myHtml);

          $imageTags = $doc->getElementsByTagName('img');

          //get the images that has id attribute from DB
          $imgSource=$this->imgSource;    //imgSource is an array
          $imgID=$this->imgID;            //imgID is an array

          //search the htmlstring and add the id attribute to the images
          foreach($imageTags as $tag) {
            $source=$tag->getAttribute('src');

           //if the html contains the image that has id attribute..
              if(in_array($source, $imgSource)){

               $ids=array_keys($imgSource,$source);
               foreach($ids as $id){
                  $tag->setAttribute('id',$imgID[$id]);
                  $myHtml=$doc->saveHTML();
                }
              }
            }
          }

上面的代码会将id分配给ID中存储了id的图像。但是,它也会 将id分配给所有重复的图像。我需要区分那些重复的图像,我只能在我的情况下在php中进行。这个问题让我抓狂!如果有人能帮助我,我真的很感激。非常感谢。

1 个答案:

答案 0 :(得分:1)

如果问题是要区分重复项,那么合适的部分是避免它们是更改将ID添加到重复图像的代码,不是吗?

我不完全理解您发布的PHP代码如何与ID一起使用,但我认为$this->imgSource$this->imgID是这样的:

$this->imgSource = array(
  [0] => 'src/image/a',
  [1] => 'src/image/b',
  [2] => 'src/image/c',
  [3] => 'src/image/a'
);
$this->imgID = array(
  [0] => 111,
  [1] => 222,
  [2] => 333,
  [3] => 444
);

因此当$source'src/image/a'时,它会执行以下操作:

$tag->setAttribute('id', 111);
$tag->setAttribute('id', 444);

如果这是你想要避免的,我建议删除id值以防止再次使用它。

$ids = array_keys($imgSource, $source);
foreach($ids as $id) {
    if(isset($imgID[$id])) {
        $tag->setAttribute('id', $imgID[$id]);
        $myHtml = $doc->saveHTML();
        unset($imgID[$id]);
        break;
    }
}