php数组两数相加和为定数,如何摆脱PHP警告:json_encode()期望参数2长,给定字符串...

本文概述

警告” json_encode()期望参数2长, 给定字符串”之所以发生, 通常是因为你提供的不是常量的数目, 而是字符串作为json_encode的第二个参数。发生这种情况通常是因为你将不存在的常量用作第二个参数, 例如在PHP 5.3中使用JSON_PRETTY_PRINT:

echo json_encode(array(), JSON_PRETTY_PRINT);

PHP 5.3中的此操作将引起警告, 因为该常量将解释为文字字符串, 因为此常量是自PHP 5.4开始引入的。对于许多提到的PHP版本中没有的常量, 也会发生同样的情况。在本文中, 我们将向你展示两种防止此警告出现的方法。

A.使用常数整数值

当你在json_encode函数中作为第二个参数提供的常量不存在时, 将发生上述警告, 因此PHP将常量名称转换为文字字符串:

// In PHP 5.3 is like providing:

echo json_encode(array(), "JSON_PRETTY_PRINT");

// which is invalid

因此, 你将需要知道要在PHP 5.3中使用的常量的整数值:

JSON_HEX_TAG => 1

JSON_HEX_AMP => 2

JSON_HEX_APOS => 4

JSON_HEX_QUOT => 8

JSON_FORCE_OBJECT => 16

JSON_NUMERIC_CHECK => 32

JSON_UNESCAPED_SLASHES => 64

JSON_PRETTY_PRINT => 128

JSON_UNESCAPED_UNICODE => 256

JSON_ERROR_DEPTH => 1

JSON_ERROR_STATE_MISMATCH => 2

JSON_ERROR_CTRL_CHAR => 3

JSON_ERROR_SYNTAX => 4

JSON_ERROR_UTF8 => 5

JSON_OBJECT_AS_ARRAY => 1

JSON_BIGINT_AS_STRING => 2

然后, 只需将其作为json_encode方法中的第二个参数提供即可, 例如JSON_PRETTY_PRINT:

echo json_encode(array(), 128);

上一个代码段将不再显示警告, 以此类推, 以及你要使用的其他常量。

B.自己定义JSON常量

如果你在无法访问JSON常量的PHP 5.3.0环境中, 则可能需要在使用它们之前在项目中的所有位置定义所有常量, 因此这些常量将存在, 因此不再显示警告。 :

// json_encode() options

define('JSON_HEX_TAG', 1); // Since PHP 5.3.0

define('JSON_HEX_AMP', 2); // Since PHP 5.3.0

define('JSON_HEX_APOS', 4); // Since PHP 5.3.0

define('JSON_HEX_QUOT', 8); // Since PHP 5.3.0

define('JSON_FORCE_OBJECT', 16); // Since PHP 5.3.0

define('JSON_NUMERIC_CHECK', 32); // Since PHP 5.3.3

define('JSON_UNESCAPED_SLASHES', 64); // Since PHP 5.4.0

define('JSON_PRETTY_PRINT', 128); // Since PHP 5.4.0

define('JSON_UNESCAPED_UNICODE', 256); // Since PHP 5.4.0

// json_decode() options

define('JSON_OBJECT_AS_ARRAY', 1); // Since PHP 5.4.0

define('JSON_BIGINT_AS_STRING', 2); // Since PHP 5.4.0

define('JSON_PARSE_JAVASCRIPT', 4); // upgrade.php

// json_last_error() error codes

define('JSON_ERROR_NONE', 0); // Since PHP 5.3.0

define('JSON_ERROR_DEPTH', 1); // Since PHP 5.3.0

define('JSON_ERROR_STATE_MISMATCH', 2); // Since PHP 5.3.0

define('JSON_ERROR_CTRL_CHAR', 3); // Since PHP 5.3.0

define('JSON_ERROR_SYNTAX', 4); // Since PHP 5.3.0

define('JSON_ERROR_UTF8', 5); // Since PHP 5.3.3

define('JSON_ERROR_RECURSION', 6); // Since PHP 5.5.0

define('JSON_ERROR_INF_OR_NAN', 7); // Since PHP 5.5.0

define('JSON_ERROR_UNSUPPORTED_TYPE', 8); // Since PHP 5.5.0

?>

定义它们之后, 你将能够照常使用代码:

echo json_encode(array(), JSON_PRETTY_PRINT);

编码愉快!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值