每次回顾,总会有一点小收获!

一、$a = 0;

$a[] = 2; // 不能将标量值用作数组 PHP Warning: Cannot use a scalar value as an array

 

$arr = ['1', '2'];

foreach($arr as $k=>$v){

  if($k == 0){

    $adm = '3333';

  }else if($k == 1){

    $adm[] = 'test'; // PHP致命错误:Uncaught error:[]运算符不支持/code/main中的字符串。PHP Fatal error: Uncaught Error: [] operator not supported for strings

  }

}

var_dump($adm);// 字符串不再支持 空索引运算符。将空索引运算符应用于字符串(例如$adm[] = $x)会引发致命错误,而不是无声地转换为数组。 若将else if 里改为 $adm[1] = 'test',则不会报错。 故字符串不再支持空索引运算符

 

二、$a = [1=>5,5=>8,22,2=>'8',81];
  var_dump($a);// [ 1=>5, 5=>8, 6=>22, 2=>'8', 7=>81 ]; 索引数组的下标定义

三、$arr = array('3', '2', '1');

foreach($arr as &$v){} // 此次循环遍历,将$v的指针指向下标为2的位置,打印$arr,数据不会变。
//var_dump($arr); // 即此次便利仍未 ['3', '2', '1']

foreach($arr as $v){//因为上次循环已将$v指针指向了下标为2的位置,故改变$v的值,也即是改变下标为2的值

var_dump($arr);// 第一次循环,给$v赋值3,即下标为2的位置也为3,故输出['3', '2', '3']
// 第二次循环,给$v赋值2,即下标为2的位置也为2,故输出['3', '2', '2']
// 第三次次循环,此时$arr = ['3', '2', '2'],不再是原来的['3', '2', '1'],给$v赋值2,即下标为2的位置也为2,故输出['3', '2', '2']
}

var_dump($arr); // 因为第一次循环遍历修改了$v指针的指向,故第二次循环,随着$v值的变化,$v指针指向的位置也会随之改变。故输出['3', '2', '2']


四、$count = 5;

  function get_count(){
    static $count = 0;
    return ++$count;
  }

echo $count++; // 先输出后执行++, 执行下一行前$count++变为6,故输出5,
echo ++$count; // $count = 6, 先执行++,$count变为7后输出,故输出7

// static静态变量作用于仅限于函数内部,且若不做unset(),则此次变更的值,下次调用函数,仍然适用。eg:
get_count(); // static $count = 0, 执行++后输出,static $count = 1; 此时return $count = 1;
echo get_count(); // 再次调用函数,static $count沿用上次函数变更后的值即static $count = 1; 后先执行++后输出,即输出为2

五、$arr = [1, 'aa' => 2, 3, 4];

foreach($arr as $k=>$v){
  print($k == 'aa' ? 5 : $v); // 输出结果依次为 5534
}

// int 和 string 做比较判断时,会将string转换为int型来比较,字符串转换为整型结果为0
// 故 0 == 'aa' 会返回true,都是0 若 0 === 'aaa' ,则返回false,因为===全等比较,要判断类型

猜你喜欢

转载自www.cnblogs.com/bestvish/p/12063524.html