【问题标题】:How can I covert an object to an array in php如何在php中将对象转换为数组
【发布时间】:2020-08-05 15:40:34
【问题描述】:

如何在 php 中将对象转换为数组?例如,这里我想将 $result 变量转换为数组。代码如下:

$statement = $adapter->createStatement('SELECT * FROM `users`');
$result    = $statement->execute();
$result = new JsonModel($result);
$result = array($result);
var_dump($result);
return ($result);
```

It produces the following output. 
array(1) { [0]=> object(Laminas\View\Model\JsonModel)#160 (8) { ["captureTo":protected]=> NULL ["jsonpCallback":protected]=> NULL ["terminate":protected]=> bool(true) ["children":protected]=> array(0) { } ["options":protected]=> array(0) { } ["template":protected]=> string(0) "" ["variables":protected]=> array(4) { [0]=> array(3) { ["id"]=> string(1) "1" ["name"]=> string(13) "J. K. Rowling" ["deleted"]=> string(1) "0" } [1]=> array(3) { ["id"]=> string(1) "2" ["name"]=> string(19) "George R. R. Martin" ["deleted"]=> string(1) "0" } [2]=> array(3) { ["id"]=> string(1) "3" ["name"]=> string(16) "J. R. R. Tolkien" ["deleted"]=> string(1) "0" } [3]=> array(3) { ["id"]=> string(1) "4" ["name"]=> string(12) "Donald Trump" ["deleted"]=> string(1) "0" } } ["append":protected]=> bool(false) } } 

【问题讨论】:

  • $result = (array)$result; 甚至$result = (array)new JsonModel($data);
  • @AbraCadaver 他说他试过了。
  • 如果类型转换不起作用,则该类可能具有私有属性和访问器方法来提取它们。您需要编写自定义代码,使用这些方法获取所需的所有属性,并将它们放入数组中。对此没有一般的答案。
  • @Barmar 他们做得不好。或者更好的问题是 it doesn't work 是什么意思。
  • 显示使用类型转换的代码,并显示结果的var_dump()

标签: php oop laminas


【解决方案1】:

在 PHP 世界中有几个 hydrators 可用。 您可以单独使用它们,也可以将它们与类似 ORM 的学说一起使用。 例如,看看这个:

  1. https://packagist.org/packages/laminas/laminas-hydrator
  2. https://packagist.org/packages/doctrine/doctrine-module

如果你使用没有 Dotrine 的 Laminas,我会选择 1

【讨论】:

    【解决方案2】:

    肮脏的把戏是......

    $result    = $statement->execute();
    $Array = json_decode(json_encode($result),true);
    

    【讨论】:

    • 在这种情况下,它会显示以下错误消息:Laminas\View\Renderer\PhpRenderer::render: Unable to render template "resource/resource/get-list";解析器无法解析到文件
    • 这感觉像是前端错误而不是数据结构错误。您可能需要包含更多代码,以便我们为您提供帮助。
    【解决方案3】:

    我们可以像这样将对象放入数组中:

    $result = $statement->execute(); $Array = (array)$result;

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 2012-01-11
      • 2010-12-24
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 2011-04-30
      • 2012-02-28
      相关资源
      最近更新 更多