【问题标题】:How to create a new key and store array values in a multidimensional way PHP如何以多维方式创建新键并存储数组值 PHP
【发布时间】:2012-08-17 07:55:39
【问题描述】:

我这里有数据:首先,我的第一个名为 getsiteaccounts() 的函数的结果

Array
(
[0] => Array
    (
        [SiteID] => 2
        [AID] => 5
    )

[1] => Array
    (
        [SiteID] => 2
        [AID] => 3
    )
[2] => Array
    (
        [SiteID] => 6
        [AID] => 4
    )

我的第二个函数名为 bindGHComponentsToSites() 的结果

   Array
  ( 
  [2] => Array
    (
        [SiteID] => 2
        [Balance] => 19000.00
        [MinBalance] => 100000.00
        [MaxBalance] => 1000000.00
        [OwnerAID] => 5
        [GroupID] => 1
        [Deposit] => 1500
        [Reload] => 1000
        [Redemption] => 1000
    )

)

然后,添加指向 OwnerAID 列表的 [CorpAID] 键。顺便说一下,OwnerAID 和 AID 是一样的。如您所见,SiteID => 2 由两个 OwnerAID => 5 和 3 拥有。这应该是结果:

   Array([0])=> Array (
        [SiteID] => 2
        [Balance] => 19000.00
        [MinBalance] => 100000.00
        [MaxBalance] => 1000000.00
        [OwnerAID] => 5
        [GroupID] => 1
        [Deposit] => 1500
        [Reload] => 1000
        [Redemption] => 1000
        [CorpAID] => Array(
                   [0] => 5
                   [1] => 3
        )
      )
  )

SiteID => 6 不应打印,因为它仅由一个 AID 拥有。有可能做到吗?请以正确的方式指导我。提前谢谢你。

【问题讨论】:

  • 能看到相关代码吗? :-)
  • @thedom,你要什么相关代码?谢谢。

标签: php arrays multidimensional-array merge


【解决方案1】:

您可以使用几个 foreach 循环来完成您需要的操作:

<?php

$siteAccounts = array(
  array('SiteID'=>2, 'AID'=>5),
  array('SiteID' => 2, 'AID' => 3),
  array('SiteID' => 6, 'AID' => 4)
);

$componentsToSites = array(array(
  'SiteID' => 2,
  'Balance' => 19000.00,
  'MinBalance' => 100000.00,
  'MaxBalance' => 1000000.00,
  'OwnerAID' => 5,
  'GroupID' => 1,
  'Deposit' => 1500,
  'Reload' => 1000,
  'Redemption' => 1000
));

foreach ($componentsToSites as &$site) {
  $aids = array();
  foreach ($siteAccounts as $acct) {
      if ($acct['SiteID'] === $site['SiteID'])
        $aids[] = $acct['AID'];
  }
  $site['CorpAID'] = $aids;
}

print_r($componentsToSites);

编辑:

我的原始答案使用array_walk 而不是foreach,但由于兼容性问题我切换了它。这是使用array_walk的原始代码sn-p:

array_walk($componentsToSites, function (&$site) use ($siteAccounts) {
  $aids = array();
  array_walk($siteAccounts, function ($acct) use ($site, &$aids) {
      if ($acct['SiteID'] === $site['SiteID'])
        $aids[] = $acct['AID'];
  });
  $site['CorpAID'] = $aids;
});

【讨论】:

  • 如果您不确定 use 关键字的作用,那么您可能需要查看这篇文章以了解详细信息:In Php 5.3.0 what is the Function "Use" Identifier?...
  • @道文,array_walk 有错误,请检查括号和括号。谢谢
  • @Mic - 我这边没有错误。您使用的是 PHP4 还是 PHP5?匿名函数可能需要重构为 PHP4 中的命名函数才能使其正常工作。
  • @DaoWen,我用的是netbeans,我猜它支持PHP 5,我是不是失去了答案?
  • @Mic - 尝试运行这个:echo phpversion();。我的给5.3.8
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
相关资源
最近更新 更多