++运算符 问题集

$num = 10;
$res = ++$num + ++$num;
echo $res.'<br>';   //23

$num = 10;
$res = ++$num + $num++;
echo $res.'<br>';   //22

$num = 10;
$res = $num++ + ++$num;
echo $res.'<br>';    //22

$num = 10;
$res = $num++ + $num++;
echo $res.'<br>';    //21

$num = 10;
$res = $num + $num++;
echo $res.'<br>';   //21

$num = 10;
$res = $num + ++$num;
echo $res.'<br>';   //22

$num = 10;
$res = ++$num + $num;
echo $res.'<br>';    //22

$num = 10;
$res = $num++ + $num;
echo $res.'<br>';  //21

 有个问题:

 1 //删除数组中的空值
 2 $arr = ['','a','s',2,'   ','0',0];
 3 print_r($arr);
 4 
 5 foreach($arr as $k=>$v){
 6     if(trim($v) == ''){
 7         unset($arr[$k]);  //foreach加上trim之后就不会把整型的0 删除掉,为什么?而for循环的那个加不加trim都不会删除整型的0.
 8     }
 9 }
10 print_r($arr);
11 
12 $arr = ['','a','s',2,'   ','0',0,0];
13 print_r($arr);
14 $len = count($arr);
15 $n = [];
16 
17 for($i=0;$i<$len-1;$i++){
18     if(trim($arr[$i]) == ''){
19         unset($arr[$i]);  //不会把整型的0删除
20     }
21 }
22 print_r($arr);
23 
24 $arr = ['','a','s',2,'   ','0',0,0];
25 print_r($arr);
26 foreach($arr as $k=>$v){
27     if($v == ''){
28         unset($arr[$k]); //会把整型的0 当做 '' 删除
29     }
30 }
31 print_r($arr);
32 //为什么for循环不会删除整型0,而foreach遍历的会把整型0删除?(在不使用===情况下)foreach加上trim之后就不会删除整型的0 为什么??
33 //也可以使用array_filter();配合回调函数把没有具体值的字符串过滤掉。
View Code

 现在终于弄明白了,今天回顾一下这个问题,有了思路。之前没有考虑运算符优先级的问题。根据手册运算符优先级,可以知道++优先级高于+。所以对于$res = $num + $num++; 会先计算$num++,后边的num会先使用它的值,然后++运算,前边的num值就随着后一个num++而改变。也就是说是11+10;而前后都有++运算符的时候,就是按照从左至右的顺序依次计算。

在举例子把:$num + ++$num;  就是11+11;

如果运算符优先级相同,那运算符的结合方向决定了该如何运算。没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的。

++$a ;a的值先加1,在返回a.  $a++   先返回a的值,在加1.

原文地址:https://www.cnblogs.com/bneglect/p/10519439.html