[PHP] 회원들의 재구매율 알아보기(2) - 두 배열 비교하기 in_array()
첫 번째와 비교할 두 번째 배열도 만들어야겠다.
후에는 물론 반복문으로 처리하겠지만 일단 다음과 같이 배열을 만들자.
$query = "SELECT distinct user_id FROM `user_data` WHERE date>='2017-02-01' and date<'2017-03-01';";
$result = mysqli_query($conn, $query);
$array_2 = array();
for($i = 0; $row = mysqli_fetch_row($result); $i = $i + 1){
$array_2[$i] = $row[0];
}
앞서 만들었던 것을 그대로 가져와 날짜를 바꾸고 결과를 $array_2에 저장하였다.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php $query = "SELECT distinct user_id FROM `user_data` WHERE date>='2017-01-01' and date<'2017-02-01';"; $result = mysqli_query($conn, $query); $array_1 = array(); for($i = 0; $row = mysqli_fetch_row($result); $i = $i + 1){ $array_1[$i] = $row[0]; } $query = "SELECT distinct user_id FROM `user_data` WHERE date>='2017-02-01' and date<'2017-03-01';"; $result = mysqli_query($conn, $query); $array_2 = array(); for($i = 0; $row = mysqli_fetch_row($result); $i = $i + 1){ $array_2[$i] = $row[0]; } ?> </body> </html>
$array_1 에는 1월의 구매자 정보가, $array_2 에는 2월의 구매자 정보가 담겼다.
이제 '1월 구매자의 재구매율' 이라 하면 1월 구매자 중 몇 명이나 2월에도 구매했는지
즉 $array_1 의 요소가 몇 개나 $array_2 에 있는지를 보면 되겠다.
이럴 때 in_array() 함수가 사용된다.
in_array() 함수는 두 가지 요소를 필요로 하며 첫 번째는 찾으려는 값, 두 번째는 대상이 되는 배열을 입력해야 한다.
일단 $array_1의 첫 번째 요소가 $array_2 에 있는지 알아보자.
echo in_array($array_1[0], $array_2);
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php $query = "SELECT distinct user_id FROM `user_data` WHERE date>='2017-01-01' and date<'2017-02-01';"; $result = mysqli_query($conn, $query); $array_1 = array(); for($i = 0; $row = mysqli_fetch_row($result); $i = $i + 1){ $array_1[$i] = $row[0]; } $query = "SELECT distinct user_id FROM `user_data` WHERE date>='2017-02-01' and date<'2017-03-01';"; $result = mysqli_query($conn, $query); $array_2 = array(); for($i = 0; $row = mysqli_fetch_row($result); $i = $i + 1){ $array_2[$i] = $row[0]; } echo in_array($array_1[0], $array_2); ?> </body> </html>
결과는 다음과 같다.
아무것도 출력되지 않았다.
in_array() 는 질문한 결과가 있으면 1, 없으면 아무것도 출력하지 않는다.
$array_1 의 첫 번째 요소는 $array_2 에 없었다는 이야기다.
두 번째 요소는 있는지 알아보자.
echo in_array($array_1[2], $array_2);
결과는 다음과 같다.
1이 출력되었다. 있다는 이야기다.
이를 이용하여 $array_1 의 모든 요소 중 몇 개나 $array_2 에 있는지의 결과를 $value에 저장할 수 있다.
for($i = 0, $value = 0; $i < count($array_1); $i++){
$value = $value + in_array($array_1[$i], $array_2);
}
눈으로 확인하고 싶다면 반복문 안에 echo를 넣자.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php $query = "SELECT distinct user_id FROM `user_data` WHERE date>='2017-01-01' and date<'2017-02-01';"; $result = mysqli_query($conn, $query); $array_1 = array(); for($i = 0; $row = mysqli_fetch_row($result); $i = $i + 1){ $array_1[$i] = $row[0]; } $query = "SELECT distinct user_id FROM `user_data` WHERE date>='2017-02-01' and date<'2017-03-01';"; $result = mysqli_query($conn, $query); $array_2 = array(); for($i = 0; $row = mysqli_fetch_row($result); $i = $i + 1){ $array_2[$i] = $row[0]; } for($i = 0, $value = 0; $i < count($array_1); $i++){ $value = $value + in_array($array_1[$i], $array_2); echo $value; } ?> </body> </html>
결과는 다음과 같다.
처음 0은 $array_1[0] 이 $array_2 에 없다는 의미이다.
그 다음은 1이므로 $array_1[1] 이 $array_2 에 있고, 2로 올라가므로 또 있고... 하는 식이다.
하여 최종적으로 $array_1 의 요소 중 29개가 $array_2 에 있다고 알려주고 있다.
이제 다음과 같이 1월 총 구매자 수, 2월 재구매자, 1월 구매자의 재 구매율을 출력할 수 있다.
echo count($array_1)," | ",$value," | ",$value/count($array_1);
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php $query = "SELECT distinct user_id FROM `user_data` WHERE date>='2017-01-01' and date<'2017-02-01';"; $result = mysqli_query($conn, $query); $array_1 = array(); for($i = 0; $row = mysqli_fetch_row($result); $i = $i + 1){ $array_1[$i] = $row[0]; } $query = "SELECT distinct user_id FROM `user_data` WHERE date>='2017-02-01' and date<'2017-03-01';"; $result = mysqli_query($conn, $query); $array_2 = array(); for($i = 0; $row = mysqli_fetch_row($result); $i = $i + 1){ $array_2[$i] = $row[0]; } for($i = 0, $value = 0; $i < count($array_1); $i++){ $value = $value + in_array($array_1[$i], $array_2); } echo count($array_1)," | ",$value," | ",$value/count($array_1); ?> </body> </html>
결과는 다음과 같다.
총 55명 중 29명이 재구매하였고, 재구매율은 52.7% 로 계산된다.