我有一个令我困惑的问题.我之前注意到了这一点,但直到今天才注意到它.我试图编写自己的整数字符串检查.我知道的is_numeric(),但它是不够的,因为它计算float的数字不仅integers与is_int()不上的串号工作.
我做了类似的事情
$var1 = 'string';
$var2 = '123';
var_dump( (int)$var1 == $var1);// boolean true
var_dump((int)$var2 == $var2);// boolean true
var_dump((int)$var1);//int 0
var_dump($var1);//string 'string' (length=6)
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,第二个var转储输出为真,因为我期望与php的松散比较,字符串和整数版本相等.
然而,对于第一个,我不明白为什么会这样.我尝试过施法bool,它仍然给我相同的结果.
我已经尝试将cast var赋值给一个新的变量并比较两者,结果仍然相同
这是我做错了什么,还是一个php bug?
***注意我不是在这里比较类型.我实际上是想利用int 0不等于的事实string 'string'.
我用不同的方式编写了整数检查,所以我真的不需要替代方案.
***编辑我做了一些额外的检查,结果证明这0 == 'string'也是正确的.怎么可能?
***编辑2问题下面有多个正确答案.感谢所有回答的人.
总结一下,我用几次迭代做了一个循环来检查每个测试的效率:
$iterations = 99999999;
$var = null;
Run Code Online (Sandbox Code Playgroud)
是比较
if ( isset( $var ) )
{
}
Run Code Online (Sandbox Code Playgroud)
'==='比较
if ( $var === null )
{
}
Run Code Online (Sandbox Code Playgroud)
我有这个日志,在几微秒内:
'isset()': 1.4792940616608
'===': 1.9428749084473
Run Code Online (Sandbox Code Playgroud)
对我来说,这有点好奇.为什么isset()函数比一个比较运算符更快===?
为什么in_array()有时表现得如此奇怪并且会产生如此意外的结果?
我们来看几个例子:
$arrayWithTrue = ['Andreas', 'Philipp', true];
$arrayWithNull = [1, 2, 3, null];
$arrayWithMinusOne = [-1];
var_dump(in_array('Gary', $arrayWithTrue)); // returns bool(true)
var_dump(in_array(0, $arrayWithNull)); // returns bool(true)
var_dump(in_array(true, $arrayWithMinusOne)); // returns bool(true)
Run Code Online (Sandbox Code Playgroud)
咦?这里发生了什么事!?
(几年前,我开始对这种奇怪的行为感到疑惑.我认为这可能对某些人有用,因此我输入了这个问题.)
我知道这!==也用于比较变量类型,而!=只比较值.
但我看到很多人!==在比较价值时会使用,例如:
$stuff = 'foo';
if($stuff !== 'foo') // do...
Run Code Online (Sandbox Code Playgroud)
他们这样做有什么理由吗?是!==快!=还是什么?
如果变量为真,我想要回应'成功'.(我最初写的"return true"仅适用于函数.
$add_visits = add_post_meta($id, 'piwik_visits', $nb_visits, true);
if($add_visits == true){
echo 'success';
}
Run Code Online (Sandbox Code Playgroud)
这相当于
$add_visits = add_post_meta($id, 'piwik_visits', $nb_visits, true);
if($add_visits){
echo 'success';
}
Run Code Online (Sandbox Code Playgroud)
或者,无论是'true'还是'false',$ add_visits都存在;
我正在阅读boolean的PHP文档.
其中一条评论说0 =='all'是真的.
http://php.net/manual/en/language.types.boolean.php#86809
我想知道它是如何成真的.
文档说除了'0'之外所有非空字符串都是真的.
所以'all'是真的,0是假的.
false == true 应该是假的.
但:
if(0=='all'){
echo 'hello';
}else{
echo 'how are you ';
}
Run Code Online (Sandbox Code Playgroud)
打印'你好'.
可能重复:
等式(== double equals)和identity(=== triple equals)比较运算符有何不同?
参考 - 这个符号在PHP中意味着什么?
php不等于!=和!==
这段代码片段中有哪些!==和===运算符?
if ( $a !== null ) // do something
if ( $b === $a ) // do something
Run Code Online (Sandbox Code Playgroud) 在PHP 5中
$my_var = "";
if ($my_var == 0) {
echo "my_var equals 0";
}
Run Code Online (Sandbox Code Playgroud)
为什么评价为真?在php.net中有关于它的一些参考吗?
我有很多array股票代码符号,因为我是一个编写股票市场模拟webapp的项目.我的一个辅助函数是通过检查符号的数组来确定输入的股票是否有效.要做到这一点,我正在使用array_search().我遇到的问题是检查边缘情况.似乎搜索没有拾取第0个元素,即使它完全没有拾取其他元素.这是数组的一部分:
[0] => AAC
[1] => AACC
[2] => AACOU
[3] => AACOW
[4] => AAIT
[5] => AAME
[6] => AAON
[7] => AAPL
[8] => AAWW
[9] => AAXJ
[10] => ABAX
[11] => ABCB
[12] => ABCD
[13] => ABCO
[14] => ABFS
[15] => ABIO
[16] => ABMD
[17] => ABTL
[18] => ABVA
[19] => ACAD
[20] => ACAS
[21] => ACAT
[22] => ACCL
Run Code Online (Sandbox Code Playgroud)
等等,如前所述,它适用于其他元素,而不是第0个.它FALSE在搜索AAC时返回.
这是我正在使用的PHP代码.
<?php
if(isset($_GET[stock])) …Run Code Online (Sandbox Code Playgroud) 我正在尝试更多地了解这种自由语言,如果有一个好的解释那就太好了。
谢谢!
php ×9
comparison ×3
arrays ×2
boolean ×1
casting ×1
evaluation ×1
javascript ×1
operators ×1
syntax ×1
variables ×1