php 数组遍历奇怪现象

1
2
3
4
5
6
7
<?php
$arr[2] = 'maxiao';
$arr[1] = 2015;
$arr[0] = 2014;
foreach ($arr as $key => $val) {
echo $val . ' ';
}

使用foreach遍历,结果是:

1
maxiao 2015 2014

1
2
3
4
$length = count($arr);
for($i = 0;$i < $length;$i++) {
echo $arr[$i] . ' ';
}

使用for遍历,结果是:

1
2014 2015 maxiao 

啊这。。foreach为什么不是按索引来遍历?而是按照添加元素的时间来遍历的。

这涉及到来php数组的底层实现,简单来说,php数据底层是一个hashtable(用链表的方式来解决hash冲突)+ 双向链表进行组织的数据,而采用foreach遍历数组的话,会根据链表来遍历,链表的顺序是添加元素的顺序。而如果用for来遍历数组的话,使用的是hashtable来查找元素。所以顺序是索引的顺序。大佬的讲解:
https://www.laruence.com/2009/08/23/1065.html。

ps:本来想画个结构图的,太麻烦了,略。

c语言学习01.类型,运算符与表达式

所有的变量都需要先声明后使用

字符串

1
char string_1[] = "hello world";

‘x’与”x”是不同的。前者是一个整数,其值是字符x在及其字符集中对应的数值(内部表示值),后者是一个包含字符(即字母x)以及一个结束符‘\0’的字符数组。

枚举

1
enum escapes { BELL = '\a', BACKSPACE = '\b',TAB = '\t'};

有点像php中的关联数组

phpstorm切换项目窗口快捷键设置

在日常开发中,经常一个人负责多个项目,phpstorm快速切换项目窗口的快捷键设置很有必要。
在macos系统中 打开phpstorm -> Preference -> Keymap,在左侧找到Other -> Activate Next Window 将这个快捷键设置成你觉得舒服的快捷键,然后保存。

安卓手机对小程序进行抓包的解决方案

安装抓包工具finder everywhere

https://www.telerik.com/support/whats-new/fiddler-everywhere/release-history
进入这个地址下载1.5.1版本的finder everywhere
1.设置


创建https证书,并使mac系统信任

2.查看mac当前网络的ip地址

3.手机安装证书
手机打开wifi设置,编辑当前网络,设置如下:

打开浏览器,输入ip+端口,比如 172.16.1.19:8866,会显示如下页面:

点击FiddlerRoot certificate下载证书并点击证书进行安装和信任。

安装virtualxposed安卓模拟环境

现在的微信做了限制,无法抓取小程序的包,这对开发极其不便,而virtualxposed可以类似docker一样提供一个虚拟的环境,在这个环境里是可以抓小程序的包的。所以需要安装它。
1.https://vxposed.com/ 将安装包发送到手机并安装。
2.打开软件并配置

点击上图中的6个点图标,就会进入设置页面,点击添加应用,选中微信,点击屏幕下方的安装,稍等片刻,微信就安装成功了,返回上图的页面,向上滑动,打开微信。登录后,就可以正常抓包了。