PHP7.2中count()函数报错count(): Parameter must be an array or an object that implements Countable

php7.2版本中 count() 函数仅支持参数为数组,在非数组的情况下将报错如下:

count(): Parameter must be an array or an object that implements Countable in xxx/shop/alipay/alipay_core.function.php on line 23

解决方案

可在执行前判断一下

if(is_array($arr)){  
	count($arr);  
}  

如果统计的是字符串,可替换为 strlen() 函数,例如

$arg = substr($arg,0,count($arg)-2);

修改为

$arg = substr($arg,0,strlen($arg)-1);

应用场景:支付宝参数处理。

/**
 * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
 * @param $para 需要拼接的数组
 * return 拼接完成以后的字符串
 */
function createLinkstring($para) {
	$arg  = "";
	foreach ($para as $key => $val) {
		$arg.=$key."=".$val."&";
	}
	//去掉最后一个&字符
	//$arg = substr($arg,0,count($arg)-2); //php7.2下count函数的参数只能是数组,参考 https://yangjunwei.com/3301.html
	$arg = substr($arg,0,strlen($arg)-1);
	
	//如果存在转义字符,那么去掉转义
	if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
	
	return $arg;
}