Condición múltiple negado

  • Autor Autor xaiborweb
  • Fecha de inicio Fecha de inicio
xaiborweb

xaiborweb

Dseda
Programador
No recomendado
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
hola tengo la siguiente condición.
PHP:
if (stripos($html_result[1][0], 'TV Series')||stripos($html_result[1][0], 'TV Episode')||stripos($html_result[1][0], 'Mini-Series')||stripos($html_result[1][0], 'Video Game') ){
		echo '1';
	}elseif (stripos($html_result[1][1], 'TV Series')||stripos($html_result[1][1], 'TV Episode')||stripos($html_result[1][1], 'Mini-Series')||stripos($html_result[1][1], 'Video Game') ){
		echo '2';
	}
y si se cumple pero cuando la quiero negar ya no se cumple como debería que estoy haciendo mal?
PHP:
if (!stripos($html_result[1][0], 'TV Series')||!stripos($html_result[1][0], 'TV Episode')||!stripos($html_result[1][0], 'Mini-Series')||!stripos($html_result[1][0], 'Video Game') ){
		echo '1';
	}elseif (!stripos($html_result[1][1], 'TV Series')||!stripos($html_result[1][1], 'TV Episode')||!stripos($html_result[1][1], 'Mini-Series')||!stripos($html_result[1][1], 'Video Game') ){
		echo '2';
	}

gracias 😉
 
Que contiene la variable $html_result y que resultado te arroja en cada caso?
 
Todo, deberías hacerlo de nuevo.

En el primer caso si algo se cumple cualquiera, da 1, de lo contrario se pasa al segundo if, si cualquiera es correcto entonces es 2.

En la negacion, desde el primer valor que se comprueba si este no se encuentra, entonces manda 1, o cualquiera que no encuentre manda 1.
Para que el segundo if se ejecute la variable [1][0] no deberia tener ninguna de las palabras de la lista anterior.

Debes tener en cuenta que es lo que quieres hacer primero, no se puede reutilizar la misma logica.

Si en el segundo fragmento, quieres que mande 1 solo si no se encuentra ninguna de las palabras, tendrias que usar AND para que pase al segundo if.


Negacion con OR.

Si palabra_existe falla (no existe) imprime 1 y termina ejecucion.
Si palabra_existe da true, entonces se pasa a cualquiera de las palabras a comprobar hasta que una de false, si ninguna da false se va al elseif.

Edito: AND AND AND AND AND AND
 
nuegalo todo no indivialmente 😀 !!
 
Todo, deberías hacerlo de nuevo.

En el primer caso si algo se cumple cualquiera, da 1, de lo contrario se pasa al segundo if, si cualquiera es correcto entonces es 2.

En la negacion, desde el primer valor que se comprueba si este no se encuentra, entonces manda 1, o cualquiera que no encuentre manda 1.
Para que el segundo if se ejecute la variable [1][0] no deberia tener ninguna de las palabras de la lista anterior.

Debes tener en cuenta que es lo que quieres hacer primero, no se puede reutilizar la misma logica.

Si en el segundo fragmento, quieres que mande 1 solo si no se encuentra ninguna de las palabras, tendrias que usar AND para que pase al segundo if.


Negacion con OR.

Si palabra_existe falla (no existe) imprime 1 y termina ejecucion.
Si palabra_existe da true, entonces se pasa a cualquiera de las palabras a comprobar hasta que una de false, si ninguna da false se va al elseif.

Edito: AND AND AND AND AND AND

gracias por responder ya lo solucione y adjunto el código completo como tutorial por si alguien lo quiere sirve para a partir de un titulo y año encontrar el id de imdb de la película, se puede enviar un año de hasta 2 años de desface positivo o negativo, por si están haciendo bots, algunas paginas tiene año de la movie diferente que imdb pues con este script aun asi lo cotejara.
PHP:
<?php
$titulo = 'Imperium';
$año = '2016';
$type = 'movie';
$ch = curl_init('http://www.imdb.com/find?q='.$titulo.'&s=tt'); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_REFERER, 'http://www.imdb.com/');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36');
curl_setopt($ch, CURLOPT_HTTPHEADER,array('Accept-Language: en'));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$results = curl_exec($ch); 
curl_close($ch);
preg_match_all("(<tr class=\"findResult(.*)</tr>)siU", $results, $html_result);

if ($type == 'movie'){
	$movie1 = (stripos($html_result[1][0], 'TV Series')||stripos($html_result[1][0], 'TV Episode')||stripos($html_result[1][0], 'Mini-Series')||stripos($html_result[1][0], 'Video Game') );
	$movie2 = (stripos($html_result[1][1], 'TV Series')||stripos($html_result[1][1], 'TV Episode')||stripos($html_result[1][1], 'Mini-Series')||stripos($html_result[1][1], 'Video Game') );
	$movie3 = (stripos($html_result[1][2], 'TV Series')||stripos($html_result[1][2], 'TV Episode')||stripos($html_result[1][2], 'Mini-Series')||stripos($html_result[1][2], 'Video Game') );

	if ($movie1 === false) {
		echo '1, ';
		if (stripos($html_result[1][0], $año)||stripos($html_result[1][0],(string)($año+1))||stripos($html_result[1][0],(string)($año-1))||stripos($html_result[1][0],(string)($año+2))||stripos($html_result[1][0],(string)($año-2)) ){
			preg_match_all("(href=\"(.*)\")siU", $html_result[1][0], $link_imdb);	$idimdb = explode('/',$link_imdb[1][0]);
            echo $id_imdb = $idimdb[2];
        }else{
            if ($movie2 === false) {
            	echo '1.1, ';
            	if (stripos($html_result[1][1], $año)||stripos($html_result[1][1],(string)($año+1))||stripos($html_result[1][1],(string)($año-1))||stripos($html_result[1][1],(string)($año+2))||stripos($html_result[1][1],(string)($año-2)) ){
		            preg_match_all("(href=\"(.*)\")siU", $html_result[1][1], $link_imdb);	$idimdb = explode('/',$link_imdb[1][0]);
		            echo $id_imdb = $idimdb[2];
		        }
            }else{
            	echo false;
            }
        }
	}elseif ($movie2 === false) {
		echo '2, ';
		if (stripos($html_result[1][1], $año)||stripos($html_result[1][1],(string)($año+1))||stripos($html_result[1][1],(string)($año-1))||stripos($html_result[1][1],(string)($año+2))||stripos($html_result[1][1],(string)($año-2)) ){
            preg_match_all("(href=\"(.*)\")siU", $html_result[1][1], $link_imdb);	$idimdb = explode('/',$link_imdb[1][0]);
            echo $id_imdb = $idimdb[2];
        }else{
            if ($movie3 === false) {
            	echo '2.1, ';
            	if (stripos($html_result[1][2], $año)||stripos($html_result[1][2],(string)($año+1))||stripos($html_result[1][2],(string)($año-1))||stripos($html_result[1][2],(string)($año+2))||stripos($html_result[1][2],(string)($año-2)) ){
		            preg_match_all("(href=\"(.*)\")siU", $html_result[1][2], $link_imdb);	$idimdb = explode('/',$link_imdb[1][0]);
		            echo $id_imdb = $idimdb[2];
		        }
            }else{
            	echo false;
            }
        }
	}elseif ($movie3 === false) {
		echo '3, ';
		if (stripos($html_result[1][2], $año)||stripos($html_result[1][2],(string)($año+1))||stripos($html_result[1][2],(string)($año-1))||stripos($html_result[1][2],(string)($año+2))||stripos($html_result[1][2],(string)($año-2)) ){
            preg_match_all("(href=\"(.*)\")siU", $html_result[1][2], $link_imdb);	$idimdb = explode('/',$link_imdb[1][0]);
            echo $id_imdb = $idimdb[2];
        }else{
            echo false;   
        }
	}
}else{
//serie
}

- - - Actualizado - - -

nuegalo todo no indivialmente 😀 !!

y como lo niego todo?
 
lo pones entre parentesis y lo niegas !( )
 
Cuando quieres hacer la negación de un OR tienes que cambiarlo por AND, por ejemplo:

PHP:
if (condition || condition || condition) {
    # code...
}

por:
PHP:
if (!condition && !condition && !condition) {
    # code...
}

O como te comentaron, simplemente metiendo todo en paréntesis.

Saludos.
 
Atrás
Arriba