FrazeColder
Lt. Commander
- Registriert
- Okt. 2013
- Beiträge
- 1.721
Moin zusammen,
ich komme derzeit leider nicht weiter... Und zwar möchte ich für jedes Produkt im XML File herausfinden, ob im Title oder in der URL ein bestimmtes Keyword steht. Falls dem so ist, soll ein neuer Tag in das XML eingefügt werden welches den Wert des Keywords annimmt. Aber genau da liegt mein Problem...
Ich weiß nicht wie ich das so programmieren soll, dass der checkt ob es das Keyword gibt oder nicht und wenn nicht, dass er dann einfach "Nothing" einfügen soll. Meiner Meinung nach müsste noch ein else-Zweig in die zweite for-Schleife. Allerdings weiß ich nicht was ich da rein schreiben soll in die Bedingung. Weil wenn ich einfach reinschreibe, dass es nicht im Keyword-Array ist, dann ist es ja immer Nothing, da er in der for-Schleife ja dann immer nur Keyword 0 und nicht alles checken kann.
Weil halt immer else dann eintrifft...
Und wie kann ich das dann noch einfügen zu dem Produkt?
Code:
MfG und Vielen Dank!
Ich habe nun mein Problem lösen können. Das Array was ich mir erstelle und fülle mit den Werten funktioniert nun!
Es hat genau 1589 Einträge (Von 0 - 1588).
Allerdings habe ich immer noch ein Problem. Und zwar sind laut meiner Testprüfung nur 1588 Produkte und auch nur 1588 Namen in meiner XML Liste, was ich leider nicht verstehe... Wieso ist das Array größer?
Dardurch kommt es dann zu dieser Fehlermeldung:
Hat jemand eine Idee, wie ich das beheben kann?
Line 64 ist in dem Code hier Line 48!
Der Code sind nun so aus:
ich komme derzeit leider nicht weiter... Und zwar möchte ich für jedes Produkt im XML File herausfinden, ob im Title oder in der URL ein bestimmtes Keyword steht. Falls dem so ist, soll ein neuer Tag in das XML eingefügt werden welches den Wert des Keywords annimmt. Aber genau da liegt mein Problem...
Ich weiß nicht wie ich das so programmieren soll, dass der checkt ob es das Keyword gibt oder nicht und wenn nicht, dass er dann einfach "Nothing" einfügen soll. Meiner Meinung nach müsste noch ein else-Zweig in die zweite for-Schleife. Allerdings weiß ich nicht was ich da rein schreiben soll in die Bedingung. Weil wenn ich einfach reinschreibe, dass es nicht im Keyword-Array ist, dann ist es ja immer Nothing, da er in der for-Schleife ja dann immer nur Keyword 0 und nicht alles checken kann.
Weil halt immer else dann eintrifft...
Und wie kann ich das dann noch einfügen zu dem Produkt?
Code:
Code:
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);
}
MfG und Vielen Dank!
Ergänzung ()
Ich habe nun mein Problem lösen können. Das Array was ich mir erstelle und fülle mit den Werten funktioniert nun!
Es hat genau 1589 Einträge (Von 0 - 1588).
Allerdings habe ich immer noch ein Problem. Und zwar sind laut meiner Testprüfung nur 1588 Produkte und auch nur 1588 Namen in meiner XML Liste, was ich leider nicht verstehe... Wieso ist das Array größer?
Dardurch kommt es dann zu dieser Fehlermeldung:
HP Notice: Undefined offset: 1589 in C:\Users\Jan\PhpstormProjects\censored\test.php on line 63
PHP Fatal error: Uncaught Error: Call to a member function appendChild() on null in C:\Users\Jan\PhpstormProjectscensored\test.php:64
Stack trace:
#0 C:\Users\Jan\PhpstormProjects\censored\test.php(95): isContaining(Array, 'name', 'link', 'product', 'data/gamesplane...')
#1 {main}
thrown in C:\Users\Jan\PhpstormProjects\censored\test.php on line 64
Hat jemand eine Idee, wie ich das beheben kann?
Line 64 ist in dem Code hier Line 48!
Der Code sind nun so aus:
Code:
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);
$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");
}
}
print_r($plat);
$c = count($plat);
echo $c;
for($i = $c - 1; $i >= 0; $i--){
$node = $dom->createElement('plat', $plat[$c]);
$dom->getElementsByTagName($productTag)->item($i)->appendChild($node);
}
$dom->saveXML();
$dom->save('data/gamesplanet2.xml');
}
$dom = new DOMDocument('1.0', 'utf-8');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->load($gamesplanetPath);
$root = $dom->documentElement;
$productCounter = 0;
$nameCounter = 0;
$markerProduct = $root->getElementsByTagName("product");
for($i = $markerProduct->length - 1; $i >= 0; $i--){
$productCounter = $productCounter + 1;
}
$markerTitle = $root->getElementsByTagName("name");
for($i = 0; $i < $markerTitle->length; $i++){
$nameCounter = $nameCounter + 1;
}
echo $productCounter . "\n";
echo $nameCounter . "\n";
isContaining($searches, "name", "link", "product", $gamesplanetPath);
?>