アプリ版:「スタンプのみでお礼する」機能のリリースについて

Data AとData Bをもとに
Data Cを作成したいのです。
※DataAに無くても、DataBにあるものはDataCに格納したい。

*Data A*
----------------------------
index | indexA | Name
----------------------------
1    100   A_Test1
2    101   A_Test2
3    102   A_Test3
4    103   A_Test4
5    104   A_Test5
6    105   A_Test6
7    106   A_Test7


*Data B*
----------------------------
index | indexA | flg
----------------------------
11   100   1
12   101   0
13   102   1
14   103   1
15   104   1
16   106   0


*Data C* indexAをkeyに結合
-------------------------------
index | ndexA | Name | flg
-------------------------------
1    100  A_Test1  1
2    101  A_Test2  0
3    102  A_Test3  1
4    103  A_Test4  1
5    104  A_Test5  1
6    NULL  A_Test6  0
7    106  A_Test7  0


arrayDataA = Array( [0] => Array([indexA]=> 100 [Name] = A_Test1
          [1] => Array([indexA]=> 101 [Name] = A_Test2
          [2] => Array([indexA]=> 102 [Name] = A_Test3
          [3] => Array([indexA]=> 103 [Name] = A_Test4
          [4] => Array([indexA]=> 104 [Name] = A_Test5
          [5] => Array([indexA]=> 105 [Name] = A_Test6
          [6] => Array([indexA]=> 106 [Name] = A_Test7
         ))

arrayDataB = Array( [0] => Array([indexA]=> 100 [flg] = 1
          [1] => Array([indexA]=> 101 [flg] = 0
          [2] => Array([indexA]=> 102 [flg] = 1
          [3] => Array([indexA]=> 103 [flg] = 1
          [4] => Array([indexA]=> 104 [flg] = 1
          [5] => Array([indexA]=> 106 [flg] = 1
         ))
というところまで格納するこはできたのですが
この、arrayDataAとarrayDataBを元に
arrayDataCを作成したいのです。

初歩的なことかと思いますが、
どのように、プログラムを書くと実現できるのでしょうか?

よろしくお願いいたします。

A 回答 (3件)

なんか非効率的な書き方かもしれませんが、こんな感じでどうでしょう?


これであれば$arrayDataAか$arrayDataBのどちらかに存在すれば
$arrayDataCに収めることができます

<?
$arrayDataA = Array(
'0' => Array('indexA'=> '100', 'Name' => 'A_Test1')
,'1' => Array('indexA'=> '101', 'Name' => 'A_Test2')
,'2' => Array('indexA'=> '103', 'Name' => 'A_Test4')
);

$arrayDataB = Array(
'0' => Array('indexA'=> '100', 'flg' => '1')
,'1' => Array('indexA'=> '101', 'flg' => '0')
,'2' => Array('indexA'=> '102', 'flg' => '1')
);
$arrayDataC=Array();
foreach($arrayDataA as $key=> $array){$indexAlist[$array['indexA']]['AKey']=$key;}
foreach($arrayDataB as $key=> $array){$indexAlist[$array['indexA']]['BKey']=$key;}
ksort($indexAlist);
$count=1;
foreach($indexAlist as $key=> $array){
$C=&$arrayDataC[$count++];
$C['indexA']=$key;
$C['Name']=$arrayDataA[$array['AKey']]['Name'];
$C['flg']=$arrayDataB[$array['BKey']]['flg'];
}
print "<pre>";
print_r($arrayDataC);
print "</pre>";
?>

ちなみに要件のなかに$arrayDataCは1から始まるような指定があったので
そのように対応しましたが、ふつうは配列は0からはじまります
    • good
    • 0
この回答へのお礼

yambejpさま

誠にありがとうございます。
配列の操作に不慣れというあって大変、参考になります。

ありがとうございました。

お礼日時:2009/09/11 15:20

仕様定義がおかしくないですか?



>※DataAに無くても、DataBにあるものはDataCに格納したい。

と書いてありますが、実際には
DataBに無くても、DataAにあるものを表示していますし、しかも

>6    NULL  A_Test6  0

となっていますが

6    105  A_Test6  NULL

ではないのですか?
私の理解がおかしいのかもしれませんが、仕様うがはっきり
していないと回答がブレるので・・・

この回答への補足

yambejpさま

ありがとうございます。
すみません。おっしゃる通りです。
矛盾しておりました。

誤)6    NULL  A_Test6  0
正)6    105  A_Test6  NULL
としたいのです。

DataBに無くても、DataAにあるものを表示したい。
つまり、DataAをベースに行いたいのです。

補足日時:2009/09/11 10:46
    • good
    • 0

泥臭いですが



arrayDataAをforeachで回しながら
arrayDataAのデータをarrayDataCにコピーする
そのforeach文の中でarrayDataBをforeachでまわして
arrayDataBの中にarrayDataAと同じindexAがあるか調べて
無ければarrayDataCのindexAをnullにする

二重ループの中でif文を書く
って形でやればできると思います

できればarrayDataBのforeachは関数にした方が
見栄えはきれいになっていいと思います。
二重ループは見栄えがよくないので
    • good
    • 0
この回答へのお礼

kichiwaveさま

ありがとうございます。

要求仕様が矛盾しておりましたが、アドバイスありがとうございます。

お礼日時:2009/09/11 10:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!