【问题标题】:Convert many dimensions array to object (but not to stdClass)将多维数组转换为对象(但不转换为 stdClass)
【发布时间】:2018-03-09 07:48:34
【问题描述】:

我有一些项目是从外部 API 大维数组中获取的。这个 api 在许多维度上返回 JSON。我必须对这些数据进行许多操作,所以我想将此嵌套数组更改/转换为我的对象类,而不是 StdObject。 我一直在寻找最好的方法,我尝试了两种解决方案:

  1. 我编写了 hydrator,它将我的维度数组转换为我的实体对象。但是当这个数组中有许多不同类型的数据时,水合器代码就不那么好了。
  2. 另一种方法是循环并序列化每个级别数组以拥有多个实体类。最后以某种方式合并到一个对象

下面放多维数组的例子:

$arr = [
    'geometry' =>
        [
            'location' => ['lat' => 54.352095, 'lng' => 18.650461],
            'viewport' => ['northeast' => ['lat' => 54.35213084999999, 'lng' => 18.65059885], 'southwest' => ['lat' => 54.35206664999999, 'lng' => 18.65041305],],
        ],
    'icon' => 'https://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png',
    'id' => '2a293ddb8ddfdc1d65274d12c8465e50a3fe68ef',
    'name' => 'Cafe Szafa',
    'opening_hours' => [
        'open_now' => false, 
        'weekday_text' => [
            'text1',
            'text2',
        ]
    ],
    'photos' => [
        'number' => 6,
        'quality' => 90
    ],
    'place_id' => 'ChIJkaVEf3Vz_UYRQdJXi93rMuo',
    'rating' => 4.2,
    'reference' => 'CmRSAAAAUh4a5IzCSVbJTewsfTI0t-rBLC-SwY417eXejcn9GN4el36oLMCSlPKukX6BCiQRV8SU1WmtptK5vx3VsLYZSVxmYmG0eyz87tQk9qO7fPgGcuThczRu4-g4KVSCWDUeEhBxTHb4lNKjk9_qveBXVh1NGhSLW4uY08XRCJFv8ivPK1j-EP8hnw',
    'scope' => 'GOOGLE',
    'types' => ['bar', 'point_of_interest', 'establishment'],
    'vicinity' => 'Podmurze 2, Gdańsk',
];

结局我想用这个数组中的数据从我自己的类中获取一个对象,但我并没有将数组中的所有数据“放入”到mam propetris 对象中,只有一些被选中。而且我不想得到对象 StdObject。 也许您知道更好的方法,我发现仅在第 1 点和第 2 点中描述。 我将不胜感激任何提示和帮助

【问题讨论】:

  • "put" 到mam propetris 对象只有一些,被选中。?不明白你在问什么如果你想数组对象意味着你可以使用json_encode();
  • 基本上,如果对象的结构是众所周知的,您可以只使用一个使用该数组初始化类属性的类构造函数。每个子数组都可以调用另一个类的构造函数。
  • 你应该看看jmsyst.com/libs/serializer 及其反序列化功能
  • print_r(json_encode($arr, JSON_FORCE_OBJECT)); 会做到这一点...

标签: php arrays serialization zend-hydrator


【解决方案1】:
  1. 您需要将其编码为 json
  2. 使用第二个参数将结果解码为真

     $object= json_decode(json_encode($arr),true);
    

【讨论】:

    猜你喜欢
    • 2011-11-08
    • 2016-10-01
    • 2021-12-28
    • 2016-11-28
    • 2012-11-14
    • 1970-01-01
    • 2017-09-27
    • 2018-08-09
    相关资源
    最近更新 更多