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
)
```