0

ここにデータがあります: まず、getsiteaccounts() という名前の最初の関数の結果

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

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

そして、bindGHComponentsToSites() という名前の 2 番目の関数の結果

   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 が 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 は 1 つの AID のみが所有しているため、出力しないでください。それを作ることは可能ですか?適切な方法で私を導いてください。前もって感謝します。

4

1 に答える 1

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とおりです。

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;
});
于 2012-08-17T08:19:52.930 に答える