배열 합치기? 병합? 채택완료
//중략 : sql 가져오기
for ($i=0; $row=sql_fetch_array($result); $i++) {
$stopbuy = explode(",",$row['it_7']);
// 중략 : 상품 줄 반복 ($stopby를 변수로 사용)
}
이 상황에서
for 구문이 끝난 상태에서
각 row 줄의 it_7을 병합하여 한 변수로 만드는게 가능할까요?
array_merge를 공부해봤는데 두개나 세개의 정해진 배열을 합하는게 아닌
각 불특정 숫자의 row를 병합하는거라 초보에겐 어렵습니다 ㅠㅠ
답변 3개
그러면 그냥 다합쳐버리면됩니다
$value = '';
for ($i=0; $row=sql_fetch_array($result); $i++) {
$value .= (($value)? ',' : '').$row['it_7'];
}
//for 끝난뒤 배열로
$stopbuy = explode(',', $value);
답변에 대한 댓글 10개
$value = '';
for ($i=0; $row=sql_fetch_array($result); $i++) {
$value .= (($value)? ',' : '').$row['it_7'];
}
if(strpos($value, '확인할값') !== false){
//포함되어있습니다.
}
이런식으로 배열로 굳이 안합치고도 확인할값이 있는지 확인할수있습니다
https://ye-ah.net/coding/50?sca=PHP
혹시 실례가 되지 않는다면
$value .= (($value)? ',' : '').$row['it_7'];
이게 어떤 뜻인지 좀 가르쳐주실 수 있나요?
풀자면
if($value){
echo ',';
}else{
echo '';
}
입니다
(조건)? '조건이맞을때' : '조건이 아닐때'
if else문 축약한거라고 보시면되요
그런데 이해되지 않는게 한가지 더 있는데
제가 기존 for 구문 안에서 실행하였거든요
새로 for 구문을 넣은게 아니라
그러면 예를 들면 $row['it_7']이
$row['it_7'][0]
$row['it_7'][1]
$row['it_7'][2]
이렇게 나오는거 아닌가요?
근데
$value .= (($value)? ',' : '').$row['it_7'];
여기서는 어떻게 그게 다 합쳐진거지요?
DB에서 sql_fetch_array로 각 데이터값을 뽑아왔을때 $row[컬럼명]으로 각 컬럼값을 추출하는것인데
여기서 뽑아온 데이터의 값은 보통 숫자,문자열입니다(뽑아온 데이터를 후처리 하지않는 이상 기본은 문자,숫자데이터입니다)
에초에 문자열이기 때문에 문자열을 그냥 하나로 합친거뿐이에요
$stopbuy = explode(",",$row['it_7']);
에서
explode 함수가 문자열을 특정조건(여기선 콤마 ,)에 따라 구분하여 배열로 만든다거든요
$row['it_7']가 배열이라면 explode가 에초에 안됩니다
더 궁금한 것이 많지만 바쁘시고 민폐인거 같아서 질문 그만할게요 ㅎㅎ
진짜 잘 알려주셔서 너무너무 감사합니다
딱 하나만 질문할게요 ㅠㅠ
row가 배열이 아니라고 하셨는데 거기까진 이해했거든요
근데 for 구문 안에
상품명, 가격 이렇게 줄이 있으면
그게 반복이 되는거잖아요
그래서 row['it_id'] 를 그 for 구문 안에 쓰면
각 줄에 하나의 상품코드만 나오잖아요 i++ 반복이 되는거니까
$value .= (($value)? ',' : '').$row['it_7'];
여기서는 각 줄에 하나만 나오는 것처럼 $$row['it_7']이 한 상품 것만 나오는게 아닌건가요?
실제로 제가 <?php echo $row['it_id']; ?> 했을 땐
각 줄에 하나씩 나오거든요
근데 저 value 부분은 어떻게 다 나오는지 궁금해요
댓글을 작성하려면 로그인이 필요합니다.
점심먹고와서 ㅎㅎ
$row['it_7']의 "값"이 배열이아닌것이지
$row는 배열이에요 배열의 값이 배열이아닌거라고하면 더헷갈리실려나...
$row는 배열 $row['it_7'] 즉 배열의 안에 든 "값"은 배열이아니니깐요
for문에서 sql_fetch_array하면 각 DB의 데이터를 배열로 반복될때마다 한줄씩 가져옵니다
처음에 for문이전에 $value='';선언해줬죠? 빈 변수값을 하나두고
for문 반복문이 돌아갈때 위에 선언해준 $value변수값에 그냥 계속 더하는거에요
for문 반복문이 돌때마다 $value = $value + 1; 해주신다고 생각히시면되요
그럼 for문이 끝나면? for 반복돈 만큼 숫자가 $value변수에 담겨져있겠죠?
이것처럼 문자열도 반복할때마다 $value에 더해줘서 그냥 다합치는겁니다
$value .= (($value)? ',' : '').$row['it_7'];
php에서 .은 붙인다를 의미합니다
.= 식은 +=생각하시면돼요 $b += $b; 를 풀어쓰면 $b = $b + $b;
즉 $value = $value . ($value)? ',' : '') . $row['it_7'];
인것이지요
(($value)? ',' : '')를 준이유는 그냥 붙이면 "배,사과,감메론,수박"이 되기때문에
이미 앞에 추가한 값이 있을경우 , 를 붙여서 구분을 해주기 위함입니다
답변에 대한 댓글 1개
이제야 이해가 됐습니다
너무너모너무 감사합니다
진짜 도움이 많이 됐어요
말로 표현 못 할만큼 감사합니다
좋은 분이시네요 복 받으세요
꼭 로또되시구요 ㅎㅎ
댓글을 작성하려면 로그인이 필요합니다.
$stopbuy에 입력된 배열값을 한 문자열로 다시 합치고싶다는건가요?
이게 맞다면 implode쓰시면됩니다 배열값을 문자열로 만들수있습니다 중간에 구분자도 넣을수있구요
답변에 대한 댓글 1개
상품[1] : it_7 배열
상품[2] : it_7 배열
.
.
.
이런 식으로 for 구문 row 줄에서 각 상품의 it_7이 반복이 되잖아요
이 it_7의 배열을 모두 합치고 싶은거에요
예를 들어
상품 1 it_7 : 배, 사과, 감
이걸 for 구문 안 row 줄에선 explode로
배
사과
감
이렇게 만들어서 쓰고 있는데
상품 1 it_7 : 배, 사과, 감
상품 2 it_7 : 메론, 수박
상품 3 it_7 : 감자
.
.
.
이걸
배
사과
감
메론
수박
감자
.
.
.
이렇게가 필요한거에요 for 구문 끝난 상황에서
그래서 저 합친걸 $total 이라고 가정한다면
if (in_array($member['mb_id'], $total)) {
조건문;
}
이런게 필요한거에요
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
배열로 비교하는 방법도있고 문자열로 바로 비교하는 방법도있습니다
문자열안에 포함여부를 판단하는 strpos함수도있으니 참고바랍니다