PHP遍历JSON对象、对象属性、类的函数、数组的方法,判断变量的类型的方法
微wx笑
2022-02-13【编程语言】
182
4
0关键字:
PHP 遍历 JSON对象 对象 数组 变量类型
虽然一句简单的var_dump($obj);就可以把整个对象、数组的内容全部打印出来,但是var_dump的输出没有格式化,都堆到了一起,很难阅读,所以根据自己的需要来结构化输出遍历的内容还是很实用的。
目录
要进行遍历,判断变量的类型是关键。
PHP如何判断变量的类型?
1、gettype()
gettype 会根据 参数类型返回下列值
“boolean”(从 PHP 4 起)
“integer”
“double”(如果是 float 则返回“double”,而不是“float”)
“string”
“array”
“object”
“resource”(从 PHP 4 起)
“NULL”(从 PHP 4 起)
“unknown type”
例如:
gettype('1');返回的是string
而gettype(1);返回的是integer
2、php自带的类型判断如下
1 2 3 4 5 6 7 8 9 10 11 12 13 | 1 isset(): //变量是否已经声明 2 empty (): //变量是否为空 3 defined(): //常量是否已经定义 define() 4 array_key_exists (mixed key, array search): //检查给定的键名或索引是否存在于数组中 5 6 is_numeric ( mixed var ): //检测变量是 否为数字或数字字符串 7 is_bool (): // 检测变量是否是布尔型 8 is_float (): // 检测变量是否是浮点型 和is_double,is_real()都一样的用法 9 is_int (): // 检测变量是否是整数is_integer() 一样的 用法 10 is_string (): // 检测变量是否是字符串 11 is_object (): // 检测变量是否是一个对象 12 is_array (): // 检测变量是否是数组 13 is_null (): // 检测变量是否为 NULL 值是否是NULL大小写敏感 |
3、PHP empty、isset、isnull的区别
empty
如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,”"、0、”0″、NULL、FALSE、array()、var $var、未定义;以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。
isset
如果 变量 存在(非NULL)则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。
is_null
检测传入值【值,变量,表达式】是否是null,只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定义变量传入后会出错!】
4、PHP如何遍历JSON对象、对象、数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | $obj = json_decode( $json ); foreachObject( $obj , "==" ); function foreachValue( $value , $prefix ){ if ( gettype ( $value ) === "object" ){ foreachObject( $value , $prefix . "==" ); } else { if ( gettype ( $value ) === "array" ){ foreachArray( $value , $prefix . "==" ); } else { print "$value\n<br>" ; } } } function foreachArray( $arr , $prefix ){ foreach ( $arr as $key => $value ){ echo "{$prefix}{$key}=>" ; foreachValue( $value , $prefix ); } } function foreachObject( $obj , $prefix ){ foreach ( $obj as $key => $value ) { echo "{$prefix}{$key}=>" ; foreachValue( $value , $prefix ); } } |
说明:
三个函数方法存在循环调用,
如果你知道它是一个数组,可以调用 foreachArray,
你知道它是一个对象,可能调用:foreachObject,
不知道它是什么类型,就调用:foreachValue
$prefix 是打印输出的时候的前缀。
输出的内容类型下面这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ========hotLinks=> ==========0=> ============name=>鬼故事 ============url=>http://www.ximalaya.com/yule/mr10t3202/ ==========1=> ============name=>京剧 ============url=>http://www.ximalaya.com/xiqu/jingju/ ==========2=> ============name=>国学 ============url=>http://www.ximalaya.com/renwen/guoxue/ ==========3=> ============name=>轻音乐 ============url=>http://www.ximalaya.com/yinyue/qingyinyue/ ==========4=> ============name=>相声 ============url=>http://www.ximalaya.com/xiangsheng/xiangsheng/ ==========5=> ============name=>武侠小说 ============url=>http://www.ximalaya.com/youshengshu/wuxia/ ==========6=> ============name=>睡前故事 ============url=>http://www.ximalaya.com/ertong/gushi/mr15t151/ ==========7=> ============name=>新概念英语 ============url=>http://www.ximalaya.com/waiyu/yingyu/mr34t1991/ |
具体希望输出个什么样子,你可通过修改代码来实现。
5、判断是否存在某个方法/函数
可以通过“method_exists”来判断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php class Example { public static function loop() { self::introduction(); $name = "step_one" ; $int = 2; $formater = new NumberFormatter( "en" , NumberFormatter::SPELLOUT); while (true) { if (method_exists(get_class(), $name )) { self:: $name (); $number = $formater ->format( $int ); $name = "step_" . $number ; $int ++; } else { break ; } } } public static function introduction(){ ?> |
6、遍历类、对象有哪些方法/函数
主要用到“get_class_methods”方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php class Example { public function loop() { $methods = get_class_methods(get_class()); foreach ( $methods as $method ) { if ( $method != "loop" ) { $this -> $method (); } } } public function introduction(){ ?> |
可以通过这种方式调用方法,但是有几点需要注意
有参数的方法通常是调用失败的,不知道有没有方法可以获取到方法需要哪些参数
构造函数不能重复调用
7、判断对象是否存在某个属性
1 2 3 | if (property_exists( $this , $name ) ) { $this -> $name = $value ; } |
相关参考:
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/lang/2022-02-13/1036.html