배열 간략하게 하는 것 질문입니다
본문
아래 코드는 그누스터디의 내용을 가져온 것입니다~~~
2. write_update.skin.php
<?php
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
$wr_1 = "$option1[0],$option1[1],$option1[2],$option1[3],$option1[4]"; // 옵션1
sql_query(" update $write_table set wr_1 = '$wr_1' where wr_id = '$wr_id' ");
?>
위 코드를 아래와 같이 하는 것과 동일한 것인가요?
<?php
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
$wr_1 = implode(',', array_slice($option, 0, 5));
sql_query(" update $write_table set wr_1 = '$wr_1' where wr_id = '$wr_id' ");
?>
답변 4
// 첫 번째 코드
$wr_1 = "$option1[0],$option1[1],$option1[2],$option1[3],$option1[4]";
// 두 번째 코드
$wr_1 = implode(',', array_slice($option1, 0, 5));
이 두 코드는 실제로 동일한 결과를 만들어내지 않습니다. 그 이유를 설명하겠습니다:
1. 첫 번째 코드의 동작방식:
- PHP의 문자열 처리 방식에 따라, 배열 요소가 없더라도 빈 문자열로 처리됩니다.
- 예를 들어 `$option1`에 2개의 요소만 있다면:
- `$option1[0]` = "값1"
- `$option1[1]` = "값2"
- `$option1[2]` = "" (존재하지 않으므로 빈 문자열)
- `$option1[3]` = "" (존재하지 않으므로 빈 문자열)
- `$option1[4]` = "" (존재하지 않으므로 빈 문자열)
- 결과: "값1,값2,,,,"
2. 두 번째 코드의 동작방식:
- `array_slice()`는 실제 존재하는 배열 요소만 가져옵니다.
- 같은 예시에서:
- `array_slice($option1, 0, 5)`는 존재하는 2개의 요소만 반환
- `implode()`는 이 2개의 요소만 결합
- 결과: "값1,값2"
따라서 첫 번째 코드가 "정상 작동"하는 것처럼 보이는 이유는 그누스터디가 항상 5개의 구분된 값(일부는 빈 값이더라도)을 기대하고 있기 때문입니다.
더 정확한 두 번째 코드 작성방법은 다음과 같습니다:
$option1 = array_pad(array_slice($option1, 0, 5), 5, ''); // 배열을 5개 요소로 맞춤
$wr_1 = implode(',', $option1);
이렇게 하면:
1. `array_slice()`로 최대 5개 요소를 가져오고
2. `array_pad()`로 부족한 요소를 빈 문자열로 채워서
3. 첫 번째 코드와 동일한 결과를 만들어냅니다
$wr_1 = implode(',', array_slice($option1, 0, 5));
이렇게 해야 동일하겠네요
아래 코드를 이용하고 중간에 글쓰기 옵션을 빼먹지 않고 모든 옵션 필드를 작성하는 것으로 하니 저장이 됩니다~~~ 중간중간 글쓰기에 사용하지 않는 것이 있으면 저장이 제대로 되지 않습니다
$wr_7 = '';
for ($i = 0; $i < 35; $i++) {
$wr_7 .= $write_option[$i] . ($i < 34 ? ',' : '');
}
sql_query(" update $write_table set wr_7 = '$wr_7' where wr_id = '$wr_id' ");
아래 처러하니 글쓰기 옵션에서 일부만 사용해도 저장이 됩니다~
// 사용자가 선택한 옵션을 배열로 가져옵니다.
$selected_options = [];
// 35개의 옵션 중에서 필요한 옵션만 선택
for ($i = 0; $i < 35; $i++) {
if (isset($_POST['write_option'][$i]) && $_POST['write_option'][$i] !== '') {
$selected_options[] = $_POST['write_option'][$i];
} else {
$selected_options[] = ''; // 빈 문자열 추가
}
}
// 옵션을 문자열로 변환
$wr_7 = implode(',', $selected_options);
// SQL 쿼리 실행
$sql_query_result = sql_query("UPDATE $write_table SET wr_7 = '$wr_7' WHERE wr_id = '$wr_id'");
!-->