2015-10-13 101 views
0

对于客户端,我在客户端应用程序和第三方应用程序之间建立链接。第三方的应用程序需要像下面的字段:'将具有重复键的'关联数组'附加到多维关联数组

<General> 
    <Signing> 
    <Signing> 
     <FieldA></FieldA> 
     <FieldB></FieldB> 
     <FieldC></FieldC> 
    </Signing> 
    <Signing> 
     <FieldA></FieldA> 
     <FieldB></FieldB> 
     <FieldC></FieldC> 
    </Signing> 
    </Signing> 
</General> 

我们正在建设的投入在PHP中的链接,通过多维关联数组的方式。所以上面的XML将计算到以下PHP:

'General' => array(
    'Signing' => array(
     'Signing' => array(
      'FieldA' => '', 
      'FieldB' => '', 
      'FieldC' => '' 
     ), 
     'Signing' => array(
      'FieldA' => '', 
      'FieldB' => '', 
      'FieldC' => '' 
     ) 
    ) 
) 

有几个问题。

  1. 在关联数组中没有重复键。输出会混乱。
  2. 第三方需要这样,这是他们如何设置他们的应用程序。
  3. 即使在关联数组中存在重复集合这样的事情,也没有办法输出第三方期望的结果。 Signing只会被最后一个Signing项目覆盖。

我的问题是,如何使动态关联数组(这样的Signing S中的数量可能有所不同)具有重复Signing键仍然输出的Signing每一个实例,而不是一个Signing与刚刚过去的场实例。

我希望这是有道理的。我是外国人,我的大脑混乱,所以我很难解释事情。

在此先感谢!

+0

那么你在找什么输出?你永远不会有重复的键,你将不得不以某种方式区分它们'signing_0','signing_1'或类似的东西。 PS。不要在你的问题上发誓。 – DevDonkey

+0

我编辑的问题,以消除脏话,它现在说'搞砸了:) :) 问题是,第三方不希望'signing_0'和'signing_1',它只是期望重复的领域... – Sean

+0

你不会得到php数组(或json对象)中的重复键 – DevDonkey

回答

1

您无法在PHP中逐字地表示相同的数据结构。您必须以不同的方式表示它并且您的XML序列化程序必须在PHP数组结构和预期的XML表示之间进行适当的转换。一个明智的PHP阵列结构是这样的:

'General' => array(
    'Signing' => array(
     array('FieldA' => '', 'FieldB' => '', 'FieldC' => ''), 
     array('FieldA' => '', 'FieldB' => '', 'FieldC' => ''), 
    ) 
) 

的XML串行器会做一个类似于:

foreach ($array['General']['Signing'] as $signing) { 
    $xml->General->Signing->appendChild('Signing') 
    .. 
} 

究竟是如何做到这一点取决于你的XML序列化过程。只需说数据结构不需要/不能完全相同,并且需要转换层。

+0

关键是,我们不会连载XML。我不确定他们是否这样做。 但是,谢谢你的答案,每个定义不可能他们想要的。我会联系他们解决这个问题,他们将不得不解决它。 – Sean