XML:appendChild()有两个循环? (PHP)

时间:2017-01-05 23:45:33

标签: php xml dom domdocument

我遇到了问题...我想知道我的XML文件中的URL或TITLE是否包含一些指定的关键字。如果是,则应将它们添加到指定的产品中。如果不是,则应在指定产品中添加“Nothing”。

但我的问题是我没有编程的知识,程序会检查数组中的关键字是否在URL或TITLE中。因为如果不是数组的第一个关键字在URL或TITLE中,它将始终进入else部落并添加“Nothing”... 如果程序检查$searches数组中的7个关键字,怎么能说只允许程序添加“Nothing”?

该程序还必须考虑将3以上的关键字值保存为“PlayStation”而不是“PS3”,“PS4”或“PSN”!

另外,如何将它们添加到我的产品中? - 我认为我的代码不会这样做......

代码:

$searches = ["Steam", "Uplay", "Xbox", "Nintendo", "PS3", "PS4", "PSN"];

function isContaining($searches, $titleTag, $urlTag, $productTag, $path){

    $dom = new DOMDocument('1.0', 'utf-8');
    $dom->preserveWhiteSpace = false;
    $dom->formatOutput = true;
    $dom->load($path);
    $root = $dom->documentElement;

    $markerTitle = $root->getElementsByTagName($titleTag);
    $markerURL = $root->getElementsByTagName($urlTag);

    $plat = array();

    for($i = $markerTitle->length - 1; $i >= 0 ; $i--){

        $title = $markerTitle->item($i)->textContent;
        $url = $markerURL->item($i)->textContent;

        $co = count($searches);

        for($j = 0; $j < $co; $j++){
            if(stripos($title, $searches[$j]) !== false){
                if($j > 4){
                    array_push($plat, "PlayStation");
                }elseif($j < 5){
                    array_push($plat, $searches[$j]);
                }
            }elseif(stripos($url, $searches[$j]) !== false){
                if($j > 4){
                    array_push($plat, "PlayStation");
                }elseif($j < 5){
                    array_push($plat, $searches[$j]);
                }
            }elseif($j == 7 && stripos($url, $searches[$j]) == false){
                array_push($plat, "Nothing");
            }
        }
    }

    array_reverse($plat);
    print_r($plat);
    $c = count($plat);

    for($i = 0; $i < $c; $i++){
        $node = $dom->createElement('plat', $plat[$c]);
        $dom->getElementsByTagName($productTag)->item($i)->appendChild($node);
    }


    $dom->saveXML();
    $dom->save($path);
}

isContaining($searches, "name", "link", "product", $gamesplanetPath);

问候,谢谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试使用以下代码替换内部for循环:

$productFound = false;
for($j = 0; $j < $co; $j++){
    if(stripos($title, $searches[$j]) !== false){
        if($j > 3){
            array_push($plat, "PlayStation");
        }else{
            array_push($plat, $searches[$j]);
        }
        $productFound = true;
    }elseif(stripos($url, $searches[$j]) !== false){
        if($j > 3){
            array_push($plat, "PlayStation");
        }else{
            array_push($plat, $searches[$j]);
        }
        $productFound = true;
    }
}
if($productFound == false){
    array_push($plat, "Nothing");
}

注意:数组索引从0开始

关于你的上一个问题

  

如何将它们添加到我的产品中?

通过添加到您的产品,我不知道您的意思。