PHP 배열에 담긴 값들의 모든 조합을 데이터베이스 테이블에 삽입하려면 중첩된 foreach 루프와 INSERT INTO 문을 함께 사용하면 됩니다. 루프를 하나씩 중첩할 때마다 해당 배열의 요소가 조합에 추가되므로, 루프의 개수는 조합하려는 배열의 개수와 동일하게 맞춰 주면 됩니다.
예를 들어 다음과 같은 세 개의 배열이 있다고 가정해 보겠습니다.
$name1 = ["John", "Mike"]; $name2 = ["David", "Sam"]; $name3 = ["Bob", "Adam"];
각 배열에 요소가 2개씩 있으므로 만들 수 있는 조합은 총 2 × 2 × 2 = 8가지입니다. 아래 예제에서는 foreach 루프를 세 번 중첩해 이 조합들을 모두 생성하고, 각 조합을 INSERT 문 형태로 출력합니다.
예제 코드
<!DOCTYPE html>
<html>
<body>
<?php
$name1 = ["John", "Mike"];
$name2 = ["David", "Sam"];
$name3 = ["Bob", "Adam"];
// 세 개의 배열을 중첩 루프로 순회하며 모든 조합 생성
foreach ($name1 as $n1) {
foreach ($name2 as $n2) {
foreach ($name3 as $n3) {
echo "INSERT INTO `student_details` (`name1`, `name2`, `name3`) VALUES ('$n1', '$n2', '$n3');\n";
echo "<br>";
}
}
}
?>
</body>
</html>
실행 결과
코드를 실행하면 세 배열의 값으로 만들 수 있는 8가지 조합이 모두 INSERT 문 형태로 출력됩니다.
INSERT INTO `student_details`(`name1`,`name2`,`name3`)VALUES('John','David','Bob');
INSERT INTO `student_details`(`name1`,`name2`,`name3`)VALUES('John','David','Adam');
INSERT INTO `student_details`(`name1`,`name2`,`name3`)VALUES('John','Sam','Bob');
INSERT INTO `student_details`(`name1`,`name2`,`name3`)VALUES('John','Sam','Adam');
INSERT INTO `student_details`(`name1`,`name2`,`name3`)VALUES('Mike','David','Bob');
INSERT INTO `student_details`(`name1`,`name2`,`name3`)VALUES('Mike','David','Adam');
INSERT INTO `student_details`(`name1`,`name2`,`name3`)VALUES('Mike','Sam','Bob');
INSERT INTO `student_details`(`name1`,`name2`,`name3`)VALUES('Mike','Sam','Adam');
실전 적용 시 주의사항
위 예제는 조합을 화면에 출력하는 방식입니다. 실제로 데이터베이스에 삽입하려면 출력문 대신 mysqli나 PDO의 쿼리 실행 함수를 사용해야 하며, 외부 입력값이 쿼리에 포함될 가능성이 있다면 반드시 준비된 문(prepared statement)과 매개변수 바인딩을 사용해 SQL 인젝션 공격을 예방하는 것이 좋습니다.