WEB

[PHP] 데이터 정제

사용한 주요 함수

  • iconv_substr : iconv는 인코딩 문제 때문에 추가, substr함수는 문자열 일부 추출하는 함수
  • preg_replace : 문자열 일부를 교체하는 함수
  • is_numeric : 해당 문자열이 숫자인지 확인하는 함수
  • explode : delimeter를 기준으로 나눠서 array에 저장하는 함수
  • isset : 해당변수가 정의되었는지 확인하는 함수
  • strpos : 찾고자 하는 문자열이 해당 문자열에 포함되어 있는지 확인하는 함수, 리턴값 조심.

 

<?php
include $_SERVER["DOCUMENT_ROOT"]."/include/db.php";

$sql = " select * from product ";
$rs = $pdo -> prepare($sql);
$rs -> execute();
while($p = $rs -> fetch()) {
    $name = preg_replace("/\[.*\]/ ", "", $p["name"]);
    
    $sql2 = " update product set name = ? where idx = ? ";
    $save = $pdo -> prepare($sql2);
    $save -> execute(array( $name, $p["idx"] ));
}

$csv = fopen("./monstermart_product_detail.csv", "r");

$cnt = 0;
while(($data = fgetcsv($csv, 1000, ",")) !== false) {
    if($cnt++ == 0) continue;
    $data = array(
        "name" => iconv("euc-kr", "utf-8//IGNORE", $data[0]),
        "nameEn" => iconv("euc-kr", "utf-8", $data[1]),
        "volume" => iconv("euc-kr", "utf-8", $data[2]),
        "image" => iconv("euc-kr", "utf-8", $data[3]),
        "nutrient" => iconv("euc-kr", "utf-8", $data[4]),
        "link" => iconv("euc-kr", "utf-8", $data[5])
    );
    
    $functionalMaterial = "product.functionalMaterial-monster-".$data["nutrient"];
    
    if(strpos($data["name"],"(")){//name에 ()가 있으면 volume으로
        $array = explode("(", $data["name"]);
        $name = $array[0];
        $volume = $array[1];    
        $volume = iconv_substr($volume, 0, -1, "utf-8");//volume값 뒤에 )빼주기
    }
    else{//name에 ()가 없는 경우
        $name = $data["name"];
        $volume = "";
    }
    $taste = iconv_substr($data["volume"], 0, 1, "utf-8");
    if(!is_numeric($taste)){//taste값이 존재하면
        if(strpos($data["volume"],"(")){//taste값에 (품절) 떼기
            $vol = explode("(", $data["volume"]);
            $name = $name."(".$vol[0].")";
        }
        else $name = $name."(".$data["volume"].")";
    }
    $numTimes="";
    if(strpos($volume, ",")){//volume, numTimes 나누기
        $arr = explode(",", $volume);
        $volume = $arr[0];
        $numTimes = $arr[1]; 
    }
    echo "name = ".$name."<br>"."volume = ".$volume."<br>"."numTimes = ".$numTimes."<br><br>";*/

	//$data["volume"] = explode(",", $data["volume"]);
    //$volume = (isset($data["volume"][0])) ? $data["volume"][0] : "";
    //$numTimes = (isset($data["volume"][1])) ? $data["volume"][1] : ""; 
    //$price = preg_replace("/[^0-9]*/s","", $data["price"]);
    //$subIdx = preg_replace("/[^0-9]*/s","", $data["link"]);

    $sql = " insert into product ( name, contents, volume, numTimes, image, brand, functionalMaterial, certification) values ( ?, ?, ?, ?, ?, ?, ?, ?) ";
    $save = $pdo -> prepare($sql);
    $save -> execute(array( $name, '', $volume, $numTimes, $data["image"], "몬스터마트", $functionalMaterial, ""));
}
fclose($csv);
?>

 

<?php
include $_SERVER["DOCUMENT_ROOT"]."/include/db.php";

$sql = " select * from product ";
$rs = $pdo -> prepare($sql);
$rs -> execute();
while($p = $rs -> fetch()) {
    $name = preg_replace("/\[.*\]/ ", "", $p["name"]);
    
    $sql2 = " update product set name = ? where idx = ? ";
    $save = $pdo -> prepare($sql2);
    $save -> execute(array( $name, $p["idx"] ));
}

$csv = fopen("./myProtein_product_detail.csv", "r");

$cnt = 0;
while(($data = fgetcsv($csv, 1000, ",")) !== false) {
    if($cnt++ == 0) continue;
    $data = array(
        "name" => iconv("euc-kr", "utf-8//IGNORE", $data[0]),
        "price" => iconv("euc-kr", "utf-8", $data[1]),
        "volume" => iconv("euc-kr", "utf-8", $data[2]),
        "image" => iconv("euc-kr", "utf-8", $data[3]),
        "nutrient" => iconv("euc-kr", "utf-8", $data[4]),
        "link" => iconv("euc-kr", "utf-8", $data[5])
    );
    
    $name = $data["name"];
    $price = preg_replace("/[^0-9]*/s","", $data["price"]);
    $volume = $data["volume"];
    $numTimes = "";
    $functionalMaterial = "product.functionalMaterial-myprotein-".$data["nutrient"];

    $result = "name : ".$name."<br>"."price : ".$price."<br>";
    $result = $result."volume : ".$volume."<br>"."numTimes : ".$numTimes."<br>";
    echo $result;

    $sql = " insert into product ( name, contents, volume, numTimes, image, brand, functionalMaterial, certification) values ( ?, ?, ?, ?, ?, ?, ?, ?) ";
    $save = $pdo -> prepare($sql);
    $save -> execute(array( $name, '', $volume, $numTimes, $data["image"], "마이프로틴", $functionalMaterial, ""));

}
fclose($csv);
?>
728x90
반응형