穿越“nodes"或多层次的对象与Ebay SDK使用davidtsadler/ Ebay - SDK -ph


Traversing "nodes" or multi-level objects with Ebay SDK using davidtsadler/ebay-sdk-php

我正在寻找一个解决方案,在整个SDK中使用,从响应对象返回所有键和值。必须有一种方法来遍历Ebay SDK PHP中的响应对象(davidtsadler/Ebay - SDK - PHP)。

既然每个节点都是一个对象,我猜这是一个"多维对象"??即使在这些里面,也有数组。请看下面的小结构:

我想打印节点/键名,以构建一个"选择节点/节"工具,然后使用循环从所选节点的值。这样我就可以在完整的响应中选择任何可用的字段来构建我的自定义报告。

我可以处理UI,但如果不单独键入每个键名,我似乎无法让对象返回键/值。

foreach和implode只能帮我写这么多,然后我还得写名字。

(下面的示例仅是该响应节点的一小部分;这里是完整的模型:http://developer.ebay.com/DevZone/XML/docs/Reference/eBay/GetMyeBaySelling.html)

  <!-- Call-specific Input Fields -->
  <ActiveList> ItemListCustomizationType
    <Include> boolean </Include>
    <IncludeNotes> boolean </IncludeNotes>
    <ListingType> ListingTypeCodeType </ListingType>
    <Pagination> PaginationType
      <EntriesPerPage> int </EntriesPerPage>
      <PageNumber> int </PageNumber>
    </Pagination>
    <Sort> ItemSortTypeCodeType </Sort>
  </ActiveList>
  <BidList> ItemListCustomizationType
     <Include> boolean </Include>
     <IncludeNotes> boolean </IncludeNotes>
     <Pagination> PaginationType
       <EntriesPerPage> int </EntriesPerPage>
       <PageNumber> int </PageNumber>
     </Pagination>
     <Sort> ItemSortTypeCodeType </Sort>
  </BidList>
  <DeletedFromSoldList> ItemListCustomizationType
    <DurationInDays> int </DurationInDays>
    <Include> boolean </Include>
    <IncludeNotes> boolean </IncludeNotes>
    <Sort> ItemSortTypeCodeType </Sort>
  </DeletedFromSoldList>
  <DeletedFromUnsoldList> ItemListCustomizationType
    <DurationInDays> int </DurationInDays>
    <Include> boolean </Include>
    <IncludeNotes> boolean </IncludeNotes>
    <Sort> ItemSortTypeCodeType </Sort>
  </DeletedFromUnsoldList> ....

有一个toArray方法可以在任何SDK的对象上调用。对象的属性名将成为返回的关联数组中的键。每个键的值是对象属性的值。如果属性的值是另一个对象,则该值可以是另一个关联数组;如果该值是一个值数组,则该值可以是一个常规数组。使用array_keys之类的东西可能意味着可以迭代对象的属性。注意,toArray将只返回一个包含有值的属性的数组。它不会返回任何为空的属性。

除了toArray之外,没有真正的方法来迭代对象的属性,因为它们是使用PHP的神奇__get和__set方法实现的。可能有一些方法可以使用PHP的重选功能,但这将意味着您的代码依赖于SDK的私有详细信息,这些详细信息可以在不通知的情况下更改或删除。