【问题标题】:PHP Object Iteration - Nested StructuresPHP 对象迭代 - 嵌套结构
【发布时间】:2019-03-11 13:58:16
【问题描述】:

我正在迭代一个对象数组,其中一些以非统一的方式嵌套。我正在执行以下操作:

foreach($response['devices'] as $key => $object) {
    foreach($object as $key => $value) {
        echo $key . " : " . "$value . "<br>";
    }
}

哪个有效...直到它命中下一个嵌入的数组/对象,它给了我一个 'Notice: 数组到字符串的转换 C:\xampp\htdocs\index.php 在线65' 错误

我对 PHP 比较陌生,到目前为止只需要处理统一的对象。这种输出更加不可预测,无法以相同的方式量化。我怎样才能“遍历”数据,以便它处理遇到的每个数组?

【问题讨论】:

  • 你应该在 echo 之前检查 $value 是数组还是字符串 :)
  • 使用递归函数,如果下一项是对象等时调用自身的函数。
  • 如果您想让数据以结构化格式显示,您可以简单地使用echo json_encode($object);

标签: php


【解决方案1】:

你应该做一个recusive函数,这意味着,函数调用自身直到满足条件,然后它返回结果并通过先前调用的函数的堆栈来确定最终结果。像这样

<?php
// associative array containing array, string and object
$array = ['hello' => 1, 'world' => [1,2,3], '!' => ['hello', 'world'], 5 => new Helloworld()];

// class helloworld
class Helloworld {

    public $data;

    function __construct() {
        $this->data = "I'm an object data";
    }
}

//function to read all type of data
function recursive($obj) {
    if(is_array($obj) or is_object($obj)) {
        echo ' [ '.PHP_EOL;
      foreach($obj as $key => $value) {
          echo $key.' => ';
          recursive($value);
      }  
      echo ' ] '.PHP_EOL;
    } else {
        echo $obj.PHP_EOL;
    }
}


// call recursive
recursive($array);

?>

这会打印出类似这样的内容:

 [ 
hello => 1
world =>  [ 
0 => 1
1 => 2
2 => 3
 ] 
! =>  [ 
0 => hello
1 => world
 ] 
5 =>  [ 
data => I'm an object data
 ] 
 ] 

我希望这会有所帮助?

【讨论】:

  • 虽然您的代码可能很好并且您已经解释过,但这只是重新发明轮子。只需使用print_r()var_dump()var_export()
  • 哦,是的,当然我只是解释,最好先了解,然后使用已有的;)
猜你喜欢
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 2016-05-30
  • 2021-05-19
  • 2023-03-21
  • 2022-12-20
  • 2020-05-04
  • 2023-01-16
相关资源
最近更新 更多