[PHP-users 30857] Re: (再掲)PHPからデータベースへのデータ格納時の処理について

Ryo Suyama ryo @ spais.jp
2006年 12月 2日 (土) 10:40:36 JST


須山と申します。

$qResult = array(array('cat','dog','rat'),array('digg','hot','dog'),array('bat','sit','get'),array('set','mat','bat'));
$index = array();
$newParameter = array();
$c = count($qResult);
for($i=0;$i<$c;$i++){
    $cc = count($qResult[$i]);
    for($ii=0;$ii<$cc;$ii++){
        if(!in_array($qResult[$i][$ii],$index))$index[$i.'_'.$ii] = $qResult[$i][$ii];
    }
}
foreach($index as $key=>$value){
    $keys = explode("_",$key);
    if(!isset($newParameter[$keys[0]]))$newParameter[$keys[0]] = array();
    for($i=($keys[0]+1);$i<$c;$i++){
        $cc = count($qResult[$i]);
        for($ii=0;$ii<$cc;$ii++){
            if($qResult[$i][$ii]==$value){
                $newParameter[$keys[0]] = $qResult[$keys[0]];
                for($x=0;$x<$cc;$x++){
                    if(!in_array($qResult[$i][$x],$newParameter[$keys[0]])){
                        array_push($newParameter[$keys[0]],$qResult[$i][$x]);
                    }
                }
                break;
            }
        }
    }
}
echo "<pre>";
Var_Dump($qResult);
Var_Dump($index);
Var_Dump($newParameter);
echo "</pre>";

取得したレコードの全ての値からユニークなインデックスを取得したレコードと
フィールドをキーとした1次元配列として作ります。

取得したレコードの値をインデックスと比較して同一であるならば、まず取得し
たレコードをそのまま同じ番号のnewParameterに代入する。
その後比較しているレコードのフィールドがnewParameterになければ代入。
レコードの比較が終わったらbreakで次のレコードへ。

文章で説明するとわかりませんね・・・上記コードを試してみてください。
さらにレコードに主キーを設定して主キーを結果のキーにすればUPDATEも問題な
いかと思います。

想像されているものとは違うかもしれませんが参考にでもなれば幸いです。


┌─┬─┬─┬┬─┐
│─┤─│─├┤─┤
├─│┌┤││├─│
├─┴┘└┴┴┴─┤
│    須山  亮    │
│  ryo @ spais.jp  │
└────────┘



PHP-users メーリングリストの案内