배열 합치기? 병합?

배열 합치기? 병합?

QA

배열 합치기? 병합?

본문

//중략 : 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);

it_7값과 비교하는 조건문이 필요하신것같은데
배열로 비교하는 방법도있고 문자열로 바로 비교하는 방법도있습니다
문자열안에 포함여부를 판단하는 strpos함수도있으니 참고바랍니다

strpos를 쓴다면
$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

아 그런거였군요 친절한 설명 너무너무 감사합니다

그런데 이해되지 않는게 한가지 더 있는데

제가 기존 for 구문 안에서 실행하였거든요

새로 for 구문을 넣은게 아니라

그러면 예를 들면 $row['it_7']이

$row['it_7'][0]
$row['it_7'][1]
$row['it_7'][2]

이렇게 나오는거 아닌가요?

근데

$value .= (($value)? ',' : '').$row['it_7'];

여기서는 어떻게 그게 다 합쳐진거지요?

에초에 $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 부분은 어떻게 다 나오는지 궁금해요

$stopbuy에 입력된 배열값을 한 문자열로 다시 합치고싶다는건가요?

이게 맞다면 implode쓰시면됩니다 배열값을 문자열로 만들수있습니다 중간에 구분자도 넣을수있구요

아 그게 아니구요

상품[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)) {

조건문;

}

이런게 필요한거에요

점심먹고와서 ㅎㅎ

$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)? ',' : '')를 준이유는 그냥 붙이면 "배,사과,감메론,수박"이 되기때문에

이미 앞에 추가한 값이 있을경우 , 를 붙여서 구분을 해주기 위함입니다

아하아하 .=에 답이 있었군요

이제야 이해가 됐습니다

너무너모너무 감사합니다

진짜 도움이 많이 됐어요

말로 표현 못 할만큼 감사합니다


좋은 분이시네요 복 받으세요

꼭 로또되시구요 ㅎㅎ

답변을 작성하시기 전에 로그인 해주세요.
전체 354
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT