编程语言您现在的位置是:首页 > 博客日志 > 编程语言

PHP遍历JSON对象、对象属性、类的函数、数组的方法,判断变量的类型的方法

<a href='mailto:'>微wx笑</a>的头像微wx笑 2022-02-13编程语言 4 0关键字: PHP  遍历  JSON对象  对象  数组  变量类型  

虽然一句简单的var_dump($obj);就可以把整个对象、数组的内容全部打印出来,但是var_dump的输出没有格式化,都堆到了一起,很难阅读,所以根据自己的需要来结构化输出遍历的内容还是很实用的。

要进行遍历,判断变量的类型是关键。obU无知


obU无知

PHP如何判断变量的类型?obU无知

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 obU无知

2、php自带的类型判断如下obU无知

 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的区别obU无知

emptyobU无知

如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,”"、0、”0″、NULL、FALSE、array()、var $var、未定义;以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。obU无知

issetobU无知

如果 变量 存在(非NULL)则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。obU无知

is_nullobU无知

检测传入值【值,变量,表达式】是否是null,只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定义变量传入后会出错!】obU无知


obU无知

4、PHP如何遍历JSON对象、对象、数组obU无知

$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);
  }
}

说明:obU无知

三个函数方法存在循环调用,obU无知

如果你知道它是一个数组,可以调用 foreachArray,obU无知

你知道它是一个对象,可能调用:foreachObject,obU无知

不知道它是什么类型,就调用:foreachValueobU无知

$prefix 是打印输出的时候的前缀。obU无知


obU无知

输出的内容类型下面这样:
obU无知

========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/

具体希望输出个什么样子,你可通过修改代码来实现。
obU无知


obU无知

5、判断是否存在某个方法/函数

可以通过“method_exists”来判断obU无知

<?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”方法
obU无知

<?php class Example { 

    public function loop() { 
    $methods = get_class_methods(get_class()); 
    foreach ($methods as $method) { 
     if ($method != "loop") { 
     $this->$method(); 
     } 
    } 
    } 

    public function introduction(){ 

    ?>

可以通过这种方式调用方法,但是有几点需要注意obU无知

  • 有参数的方法通常是调用失败的,不知道有没有方法可以获取到方法需要哪些参数obU无知

  • 构造函数不能重复调用obU无知

7、判断对象是否存在某个属性

if(property_exists($this, $name) ) {
    $this->$name = $value;
}

相关参考:

PHP:遍历所有对象方法(调用对象中的所有方法)obU无知


obU无知

本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/lang/2022-02-13/1036.html

很赞哦! () 有话说 ()