2010-03-07 6 views
0

J'ai le code suivant dont les pages de redirection dépendent de $ path.Utilisation de ||, OU en PHP

... 
$path = $this->uri->segment(3); 
$pathid = $this->uri->segment(4); 
if($path=='forsiden'){ 
      redirect('','refresh'); 
     }elseif($path =='contact'){ 
      redirect('welcome/kontakt','refresh'); 
     }elseif($path =='illustration'){ 
      $this->_gallery($path,$pathid); 
     }elseif($path =='webdesign'){ 
      redirect('welcome/webdesign','refresh');  
     }elseif($path==('web_tjenester' || 'webdesigndetails' || 
         'vismahjemmeside' || 'joomla' || 'vismanettbutikk' || 
         'vpasp' || 'artportfolio')){ 
     ... 
    CODE A 
    ...  

}else{ 
     ... 
     CODE B 
     ... 
       } 

Je ne suis pas d'obtenir des résultats avec droit

$path==('web_tjenester' || 'webdesigndetails' || 
'vismahjemmeside' || 'joomla' || 'vismanettbutikk' || 
'vpasp' || 'artportfolio') 

contact, illustration, galerie et conception de sites Web sont redirigés et travailler bien. Cependant, toutes les autres pages sont ajoutées CODE A.

J'attends CODE A seulement quand $ chemin est web_tjenester », 'webdesigndetails', 'vismahjemmeside', 'joomla', 'vismanettbutikk', 'VPASP' ou 'artportfolio' .

Quelqu'un pourrait-il signaler mon erreur et me corriger s'il vous plaît?

Merci d'avance.

--UPDATE--

Les travaux suivants, mais est-il des moyens raccourcissent le code? Je répète ($ path == ..)

elseif(($path=='web_tjenester') || ($path=='webdesigndetails') || 
    ($path=='vismahjemmeside') || ($path=='joomla') || ($path=='vismanettbutikk') || 
    ($path=='vpasp') || ($path=='artportfolio')){ 

Répondre

5

|| operator is a logical operator. La sémantique de l'expression a || b est qu'il évalue à vrai si l'a ou b est évaluée à vrai et faux autrement.

Il ne peut pas être utilisé de cette façon vous l'intention comme l'expression ('web_tjenester' || … || 'artportfolio') sera évaluée à une valeur booléenne (pour être précis: vrai comme 'web_tjenester' est évaluée à vrai en utilisant boolean conversion) qui sera ensuite comparé à la valeur de $path.

Si vous voulez tester si une valeur est dans un ensemble de valeurs, vous pouvez utiliser un tableau et tester la valeur avec in_array:

in_array($path, array('web_tjenester', 'webdesigndetails', 'vismahjemmeside', 'joomla', 'vismanettbutikk', 'vpasp', 'artportfolio')) 
1
$path==('web_tjenester' || 'webdesigndetails' || 
'vismahjemmeside' || 'joomla' || 'vismanettbutikk' || 
'vpasp' || 'artportfolio') 

Ce n'est pas une syntaxe valide, vous devez avoir le $path == en face de chaque chaîne séparée par ORs. Le moyen le plus simple de le faire, qui est plus joli est de mettre toute votre chaîne dans un tableau, puis d'utiliser la fonction in_array() pour vérifier.

$array = array('web_tjenester', 'webdesigndetails', 
'vismahjemmeside', 'joomla', 'vismanettbutikk', 
'vpasp', 'artportfolio'); 
if (in_array($path, $array)) { 
    // do whatever 
} 
+3

It * is * syntaxe valide. – Gumbo

+0

Oui, c'est une syntaxe valide. Cependant, il est obtus et excessivement compliqué pour ce qu'il fait (alias inutile) sémantiquement. – wallyk

0

Vous ne pouvez pas le faire de la façon dont vous le faites: Vous devriez comparer tout avec chemin $, alors

$path=='web_tjenester' || $path=='webdesigndetails' || 
$path=='vismahjemmeside' || $path=='joomla' || $path=='vismanettbutikk' || 
$path=='vpasp' || $path=='artportfolio' 
1

parce que $path == ('x' || 'y') signifie « évaluer 'x || y', et voir si cela équivaut à $ path.Vous auriez besoin de faire

if($path == 'x' || $path == 'y') 

Cependant, vous pouvez envisager une instruction switch:

switch($patch) { 
    case 'web_tjenester': 
    case 'webdesigndetals': 
      so_and_so(); 
      break; 
    case 'contact': 
      redirect(); 
      break; 
} 

lire sur l'interrupteur avant de le faire, mais :)

0

Vous ne pouvez pas faire ce

$path==('web_tjenester' || 'webdesigndetails' || 'vismahjemmeside' || 'joomla' || 'vismanettbutikk' ||'vpasp' || 'artportfolio') 

Il devrait être

$path=='web_tjenester' || $path=='webdesigndetails' || $path=='vismahjemmeside' || $path=='joomla' ... 

Vous pouvez définir les chemins que vous utilisez dans une matrice et utiliser [in_array()][1] pour un code de nettoyage.

Questions connexes