处理返回的strpos 0的优雅方法为TRUE

  switch(true){
case stripos($ _ SERVER ['SERVER_NAME'],“mydomain。 com“,0):

//执行某些操作
break;

/ *
stripos返回4(后面的计算结果为TRUE)
当前URL为www.mydomain.com时 n * /

默认值:

/ *
stripos返回0(进而评估为FALSE)
当前URL为mydomain.com时

  • /

    当条带查找大海捞针中的针返回0或更高时,}
    </ code> </ pre>



    当stripos找不到针时,它返回FALSE。 这种方法可能有一些优点。 但我不喜欢那样! </ p>

    我来自VB背景。 在那里,instr函数(相当于strpos)在找不到针时返回0,如果找到则返回1或者向上。 </ p>

    所以上面的代码永远不会导致问题。 </ p>

    如何在PHP中优雅地处理这种情况? 这里最好的做法是什么? </ p>

    另外,在另一个注释中,您如何看待使用</ p>

     开关(true)
    </ code> < / pre>

    这是编写代码的好方法吗?</ p>
    </ div>

展开原文

原文

switch (true){
    case stripos($_SERVER['SERVER_NAME'],"mydomain.com", 0) :

        //do something 
        break;

        /*
        stripos returns 4 ( which in turn evaluates as TRUE )  
        when the current URL is www.mydomain.com
        */


    default:

        /*
        stripos returns 0 ( which in turn evaluates as FALSE )  
        when the current URL is mydomain.com
        */


}   

when stripos finds the needle in the haystack returns 0 or up. when stripos does not find the needle, it returns FALSE. There could be some advatages of this approach. But I don't like that!

I'm coming from VB background. There, instr function (which is the equivalent of strpos) returns 0 when it cannot find the needle and returns 1 or up if it finds it.

so the above code never causes a problem.

how do you elegantly handle this situation in PHP? What's the best practice approach here?

Also, on a different note, what do you think about using the

switch(true) 

Is that a good way to write code to begin with?

dongpao1926
dongpao1926 这个开关出了什么问题?语法错误?
8 年多之前 回复
duanbiao4025
duanbiao4025 你的开关不起作用。如果你想避开===falsebooleanhump,那么使用strstr()并让PHPs字符串求值来处理它。
8 年多之前 回复
doudong2149
doudong2149 我会使用if语句。使用switch()有什么意义?我远不是一个PHP专家!
8 年多之前 回复
donglian7879
donglian7879 没有错。所以你建议把它编码为case(stripos($_SERVER['SERVER_NAME'],“mydomain.com”,0)===TRUE)这是最优雅的方式吗?
8 年多之前 回复
douhua1890
douhua1890 if(stripos(....)===false){...}else{...}有什么问题
8 年多之前 回复

1个回答



如果大海捞针内不存在针,则strpos返回false。 默认情况下(使用非严格比较),PHP会将0和false视为等效。 你需要使用严格的比较。 </ p>

  var_dump(strpos('快速的棕色狐狸跳过懒狗','狗')!== false);  // bool(true)
var_dump(strpos('快速的棕色狐狸跳过懒狗','The')!== false); // bool(true)
var_dump(strpos('快速的棕色狐狸跳过懒狗','猫')!== false); // bool(false)
</ code> </ pre>
</ div>

展开原文

原文

strpos returns false if the needle doesn't exist within the haystack. By default (using non-strict comparison), PHP will treat 0 and false as equivilant. You need to use strict comparison.

var_dump (strpos ('The quick brown fox jumps over the lazy dog', 'dog') !== false); // bool (true)
var_dump (strpos ('The quick brown fox jumps over the lazy dog', 'The') !== false); // bool (true)
var_dump (strpos ('The quick brown fox jumps over the lazy dog', 'cat') !== false); // bool (false)

doutuobao4004
doutuobao4004 从来没有打扰过我。 我想我已经做了这么久,以至于我没有真正注意到,直到有人真正提出它。 我倾向于将其视为表示在被解决之前的事物数量的数字。 在第一个角色之前没有任何东西,所以0。
8 年多之前 回复
douwuying4709
douwuying4709 我知道我认识戈登。 我一直在身边。 我只是想把我的愤怒解除原来的设计原则。 在处理诸如无穷大,0,空,空,无,空白等概念时,人类的思维会进入各种解释。
8 年多之前 回复
doufei16736
doufei16736 由于与计算机底层架构相关的原因,几乎每种编程语言都对字符串和数组使用0索引。 (如果你有一台8位地址空间的计算机,那么它将有256个内存地址。但如果你从1开始为第一个地址,那么最后一个地址将是256,这需要9位代表。如果你开始 0然后最后一个地址是255,可以用8位表示)
8 年多之前 回复
douba3378
douba3378 这是一个很好的阅读; programmers.stackexchange.com/questions/110804/...
8 年多之前 回复
dongle7637
dongle7637 好吧,无论你/我喜欢/讨厌它,那都不会改变。 至于你的评论,如果strpos sucker在开头“abc”找到“a”时返回1会更好。 数组必须从0月1日和12月11日开始,这是同样愚蠢的一部分。基于0的东西仅适用于现实生活中的电梯。 一楼被视为0.即使这是愚蠢的!
8 年多之前 回复
dou29106
dou29106 我不同意strpos('abc','a')应该返回true。 顾名思义,strpos函数返回针头内干草堆的位置。 如果干草堆碰巧在开始处有针,那么返回0的位置是完全有效的(在这种情况下,字符串与0索引数组相当)。
8 年多之前 回复
duanchun2349
duanchun2349 我会接受那个答案。 (虽然我不认为这是优雅的阅读)。 我想我们无能为力。 这就是strpos和PHP连线的方式。 if(strpos(“abc”,“a”))return true将是最优雅的方式。 但那不可能发生。 在这种情况下,马里奥建议的“strstr”更有意义。 我勾选了他的评论。
8 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问