0

1つのインデックスに基づく多次元配列をマージするのに少し苦労しています。脳が長すぎてめちゃくちゃになってしまったのかどうかはわかりませんが、これはわかりません。

2つの配列からの2つのインデックスの例は次のとおりです。

// Array1:
[0] => Array
    (
        [appID] => 58510
        [name] => SomeRandomApp
        [users] => Array
            (
                [0] => randomUser
            )

    )

// Array2:
[0] => Array
    (
        [appID] => 58510
        [name] => SomeRandomApp
        [users] => Array
            (
                [0] => anotherUser
            )

    )

// Desired Result:
[0] => Array
    (
        [appID] => 58510
        [name] => SomeRandomApp
        [users] => Array
            (
                [0] => randomUser
                [1] => anotherUser
            )

    )

「appID」だけでマージしたいのですが。次に、ユーザーに対して別のマージを実行して、別のインデックスに異なるユーザーがいる場合、それらすべてがマージされるようにします。

4

3 に答える 3

0

各アプリのユーザーのリストを取得したいようです。私はあなたがそれらをループする必要があると思います。次のように、appIDでインデックス付けされた結果配列を作成できます(テストされていません)。

function app_users($array1, $array2) {
  $combined = array ();
  foreach (array($array1, $array2) as $arr) {
    foreach ($arr as $values) {
      if (!isset($combined[$values['appId']])) {
        $combined[$values['appID']] = $values;
      }
      else {
        $combined[$values['appID']]['users'][] = $values['users'][0];
      }
    }
  }      
}

$result = app_users($array1, $array2);

これは、同じユーザーが2回リストされないことを前提としています。必要に応じて、重複を処理するように関数を変更できます。

ちなみに、キーが重複している場合、array_mergeは最初の配列の値を2番目の配列で上書きします。これは、ここで必要な動作ではないと思います。

于 2011-07-26T00:50:00.100 に答える
0

array_merge_recursive()@アンドリュー、代わりに使ってみましたか?

于 2011-07-26T01:04:32.043 に答える
0

ついにそれはすべてうまくいった。

$newArray = array();
foreach($data as $item)
{
   $appID = $item['appID'];
   $users = $item['users'];

   unset($item['users']);
   unset($item['hoursOnRecord']);

   if(!isset($newArray[$appID]))
   {
      $newArray[$appID] = $item;
      foreach($users as $user)
         $newArray[$appID]['users'][] = $user;                  
   }
   else
   {
      $users2 = $newArray[$appID]['users'];
      $newArray[$appID] = $item;

      foreach($users as $user)
         $newArray[$appID]['users'][] = $user;
      foreach($users2 as $user)
         $newArray[$appID]['users'][] = $user;
   }
}

それはかなりずさんですが、それは機能します、そして私がそう言うならばそれはかなりうまく機能します。まだベンチマークを行っていませんが、実際に目立った遅延がなく、かなり重いアレイに対してテストしました。各インデックスには、私が示しているものよりもはるかに多くのデータがあります。全体として、私は満足しています。

これが他の誰かを助けることを願っています。

于 2011-07-26T02:08:26.560 に答える