2017-01-05 6 views
0

私は問題があります... XMLファイルのURLまたはTITLEに特定のキーワードが含まれているかどうかを知りたいのですが、はいの場合は、指定された製品に追加する必要があります。いいえの場合は、指定した製品に「Nothing」を追加する必要があります。XML:appendChild()に2つのループがありますか? (PHP)

しかし、私の問題は、プログラムの知識がないので、配列のキーワードがURLかタイトルに含まれているかどうかをプログラムがチェックするということです。配列の最初のキーワードがURLまたはTITLEにない場合は、常にelse部に入り、 "Nothing"を追加します... プログラムが "Nothing"を追加することができる$searches配列の7個のキーワードを確認しましたか?

また、3以上のキーワードの値を「PS3」、「PS4」、「PSN」ではなく「PlayStation」として保存する必要があることを考慮する必要があります。

さらに、私のprodcutsに追加するにはどうすればいいですか?

$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

あなたはこの次のコードでループのためにあなたの内を置き換えるために試すことができます:

$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

から、あなたの最後の質問

どのようにすることができますについて私のprodcutsにそれらを追加しますか?

私はあなたの製品に追加することで何を意味するか分かりません。

+0

ありがとうございます、あなたのコードは私を助けます! - しかし、今は私の配列の値を指定された製品に追加したいと思います。私の言っていることが分かるよね? DOMDocumentを使用して新しい要素を作成し、配列の値を指定した製品に追加したいとします。新しい属性。どうすればいいですか... 問題は、私のコードが値を持つ配列が製品リストと同じ長さではないことを教えていることです。しかし、それはできません! すべての価値を保存するか、何も言わないでください! あなたは私の言いたいことを知っていますか? – Jan

+0

@Janの場合、配列が商品リストより長い可能性があります。 1つのURLに複数のキーワードが含まれている場合、たとえば 'steam'と 'xbox'の両方が含まれている場合、配列は2回追加されます。 –

関連する問題