一、foreach()循环对数组内部指针不再起作用,在PHP7之前,当数组通过foreach迭代时,数组指针会移动。现在开始,不再如此,见下面代码。。
$array = [0, 1, 2];
foreach ($array as &$val)
{
var_dump(current($array));
}
PHP5运行的结果会打印int(1) int(2) bool(false)
PHP7运行的结果会打印三次int(0),也就是说数组的内部指针并没有改变。
之前运行的结果会打印int(1), int(2)和bool(false)
二、按照值进行循环的时候,foreach是对该数组的拷贝操作
foreach按照值进行循环的时候(by-value),foreach是对该数组的一个拷贝进行操作。这样在循环过程中对数组做的修改是不会影响循环行为的。
$array = [0, 1, 2];
$ref =& $array; // Necessary to trigger the old behavior
foreach ($array as $val) {
var_dump($val);
unset($array[1]);
}
上面的代码虽然在循环中把数组的第二个元素unset掉,但PHP7还是会把三个元素打印出来:(0 1 2)
之前老版本的PHP会把1跳过,只打印(0 2).
三、按照引用进行循环的时候,对数组的修改会影响循环。
如果在循环的时候是引用的方式,对数组的修改会影响循环行为。不过PHP7版本优化了很多场景下面位置的维护。比如在循环时往数组中追加元素。
$array = [0];
foreach ($array as &$val) {
var_dump($val);
$array[1] = 1;
}
上面的代码中追加的元素也会参与循环,这样PHP7会打印"int(0) int(1)",老版本只会打印"int(0)"。
四、对简单对象plain (non-Traversable) 的循环。
对简单对象的循环,不管是按照值循环还是按引用循环,和按照引用对数组循环的行为是一样的。不过对位置的管理会更加精确。
五、对迭代对象(Traversable objects)对象行为和之前一致。
编者按:stackoverflow上面的解释:Traversable object is one that implements Iterator or IteratorAggregate interface。如果一个对象实现了iterator或者IteratorAggregate接口,即可称之为迭代对象。
下面我们来看一篇关于PHP7错误处理机制详解介绍,对于php7新特性我们有介绍过不小的教程,希望文章能够帮助到各位朋友。HP7实现了一个全局的throwable接口,原来的Exception和部分Error都实现了这个接口(interface), 以接口的方式定义了异常的继承结构。于是,PHP7中更多的Error变为可捕获的Exception返回给开发者,如果不进行捕获则为Error,如果捕获就变为一个可在程序内处理的Exception。这些可被捕获的Error通常都是不会对程序造成致命伤害的Error,例如函数不存。
一、现在有两个异常类:Exception and Error.
PHP7现在有两个异常类,Exception and Error。这两个类都实现了一个新的接口:Throwable。在您的异常处理代码中,类型暗示可能需要调整下。
<?php
try {
not_exists_func();
} catch (EngineException $e) {
var_dump($e->getMessage());
}
output:
string(44) "Call to undefined function not_exists_func()"
二、一些致命错误和可恢复致命错误改为抛出Error对象。
有一些致命错误和可恢复致命错误现在改为报出Error对象。Error对象是和Exception独立的,它们无法被常规的try/catch扑获。编者按:需要注册错误处理函数,请参考下面的RFC。
对于这些已经转为异常的可恢复致命错误,已经无法通过error handler静默的忽略掉。尤其是无法忽略类型暗示错误。
三、语法错误会抛出一个ParseError对象
语法错误会抛出一个ParseError对象,该对象继承自Error对象。之前处理eval()的时候,对于潜在可能错误的代码除了检查返回值或者error_get_last()之外,还应该捕获ParseError对象。
四、内部对象的构造方法如果失败的时候总会抛出异常
内部对象的构造方法如果失败的时候总会报出异常。之前的有一些构造方法会返回NULL或者一个无法使用的对象。
五、一些E_STRICT错误的级别调整了。
array_unique函数就是可以处重的,它具备了这个功能了,下面我们一来看一个关于PHP使用array_unique对二维数组去重处理例子。php 5.2.9 版本增加了array_unique对多维数组的支持,在处理多维数组是需要设置sort_flags参数
一维数组的重复项:
使用array_unique函数即可,使用实例如下:
代码如下 | 复制代码 |
|
结果如下:Array ( [0] => apple [1] => banana [2] => pear [4] => wail [5] => watermalon ) 。
二维数组去重项
代码如下 | 复制代码 |
例如: $result = array( 处理成 $result = array( 使用方法 array_unique($result, SORT_REGULAR); |
二维数组的重复项:
对于二维数组咱们分两种情况讨论,一种是因为某一键名的值不能重复,删除重复项;另一种因为内部的一维数组不能完全相同,而删除重复项,下面举例说明:
㈠因为某一键名的值不能重复,删除重复项
PHP
代码如下 | 复制代码 |
<?php function assoc_unique($arr, $key) { $aa = array( |
显示结果为:Array ( [0] => Array ( [id] => 123 [name] => 张三 ) [1] => Array ( [id] => 124 [name] => 王五 ) [2] => Array ( [id] => 125 [name] => 赵六 ) [3] => Array ( [id] => 126 [name] => 赵六 ) )
㈡因内部的一维数组不能完全相同,而删除重复项
代码如下 | 复制代码 |
|
显示结果:Array ( [0] => Array ( [0] => 123 [1] => 张三 ) [1] => Array ( [0] => 123 [1] => 李四 ) [2] => Array ( [0] => 124 [1] => 王五 ) [4] => Array ( [0] => 126 [1] => 赵六 ) )
session丢失很奇怪了经常会有碰到过小编碰到一个session丢失问题到现在还没有解决了,今天碰到了kindeditor多图上传session丢失问题了一起来看解决方案。解决办法:
1.在创建文本编辑器时增加session_id的传递
<script>
var editor;
KindEditor.ready(function(K) {
editor = K.create('textarea[name="content"]', {
allowFileManager : true,
extraFileUploadParams:{
'PHPSESSID' : "<?=session_id()?>"
}
});
</script>
<textarea name="content" style="width:800px;height:400px;visibility:hidden;">KindEditor</textarea>
2.upload_json.php文件增加session初始化
$session=isset($_POST['PHPSESSID'])?$_POST['PHPSESSID']:'';
if($session){//重新设置cookie,解决使用Flash上传图片时cookie丢失的问题
session_id($session);
session_start();
}else{
session_start();
}
找到配置文件WxPay.Config.php,只需要配置下面四项
2、redirect_uri参数错误
登陆公众管理后台-点击开发者中心-找到网页帐号点击修改,写自己域名,保存生效。
3、页面URL未注册
登陆公众微信后台-微信支付-开发配置,支付授权目录路径一直到最后一个斜杠
4、样例页面
jsapi.php jsApi支付