3

私は2つの配列を持っています(これはもっと多いかもしれません)、それらは散乱データを持っているかもしれません。

Date    | Apple                       Date    | Banana  
-----------------                    -------------------
   1      |   5                         1     |   3
   4      |   5                         3     |   1
   5      |   5                         7     |   2

配列構造は次のようになります。

array
(
   [0] => array
   (
      [date] => 4
      [apple] => 5
   )
   [1] => array
   (
       [date] => 5
       [apple] => 5
   )
)

私が必要とするのは、両方の詳細を持つ統合された配列を持つことです。以下に例を示します。

Date      Apple      Banana
-------------------------------    
 1          5          3
 3          0          1
 4          5          0
 5          5          0
 7          0          2

配列が複数の値を保持できるという事実を考慮して、これを行うにはどうすればよいでしょうか? どんなヒントでも、これを解決するのに役立ちます。または、すでに議論されている場合は正しいリンクを教えてください。検索中に何も見つかりませんでした。

前もって感謝します。

4

3 に答える 3

0

for ループを使用すると、追加する配列を反復処理したり、マスター テーブルで既存の「日付」エントリを検索したり、追加する配列の現在の「日付」値に一致する新しいエントリを作成したりできます。マスター テーブルのエントリのデータが、そこにない新しい属性タイプ (Apple、Banana など) を必要とする場合は、それをデータに追加します。また、「日付」を配列キーとして使用することもお勧めします。この方法で一致をすばやく見つけるのが簡単になります。

foreach ($appleArray as $value) {
  $date = $value['date'];
  if (isset($masterArray[$date])) {
    // Goes here if the date exists in the master array already.
    // In this case, we just append to our data the fields
    // found in the $value.
    foreach ($value as $subKey => $subValue) {
      // Iterate through each value, skip our 'date' key, and append
      // each other item to our master array.
      if ($subKey != 'date') {
        $masterArray[$date][$subKey] = $subValue;
      }
    }
  } else {
    // Goes here if the date isn't in the master array yet.
    // In this case, create a new entry and just copy the data.
    $masterArray[$date] = $value;
  }
}

このシステムでは、1 つの日付エントリにリンゴが含まれているがバナナが含まれていない場合などにフィールドが欠落します。このような場合、それらの値が 0 であると想定するか、リスト全体を反復処理して「バナナ」フィールドを追加することができます。手動で。

于 2013-07-18T16:52:19.783 に答える