php整形的最大溢出

        if($array[++$c]=1){
​          if($array[]=1)

因为两个if里面都是赋值语句,只要赋值成功就可以进入,赋值失败则退出。此题既要满足    使$array[++$c]=1赋值成功,又要满足$array[c+1后的再后一位的数组]=1赋值失败,则想到整形溢出(即满足整形最大值加1后会报错):

**PHP的32位版本:**

- 整数可以从**-2,147,483,648**到**2,147,483,647**(~20亿)

**PHP的64位版本:**

- 整数可以从**-9223372036854775808**到**9223372036854775807**

数据的第一位是符号位,当数据增大到把符号位从0变到1的时候,也就是说数据从正的变成负的了,而后面的先 都是1 (后面的满了,进位,第一位也是这样变成的1),数据由正数变成了负数,用补码表示,后面的1全部变成0,因此会得到你说的结果.

这里需要让$array[++$c]为PHP_INT_MAX-1,然后自增之后,count数组的最大键为PHP_INT_MAX,此时$array[最大键位]=1,***新键=count的最大键+1***,键值为1,这里键为P·HP_INT_MAX+1,导致报错,返回值为0,然后就退出if语句。

```
echo "";
//定义数组的多种方法
//方法一
$array=array('orange','apple','banana');
var_dump($array);//打印数组array
//方法二
$array[]='orange';
$array[]='apple';
var_dump($array);//打印数组array
//方法三
$array=[];//这种不常见,但我觉得很简洁,类似于$array=array();
var_dump($array);//打印数组array
//定义索引数组
//方法四
$array=array(
'orange'=>12,
'apple' =>18,
);
var_dump($array);//打印数组array
//方法五
$array['apple']=18;
var_dump($array);//打印数组array
```

tips:当数组已经创建的时候,继续赋值a[],则会在原来数组的最大键位后面加1在赋值

eg:

```
$a=array(1,2,4,5,6);
<?php 
$array=array('a','b','c'); 
$array[]='simon';
print_r($array); 
?>


运行结果如下所示。 
Array 

  [0]=>a 
  [1]=>b 
  [2]=>c 
  [3]=>simon 

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值