繁体   English   中英

如何以多维方式创建新键并存储数组值

[英]How to create a new key and store array values in a multidimensional way PHP

我在这里有数据:首先,我的第一个函数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
    )

)

然后,添加[CorpAID]的密钥指向OwnerAID的列表。 顺便说一句,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拥有。 有可能做到吗? 请以正确的方式指导我。 先感谢您。

您可以使用几个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的原始代码片段:

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;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM