개발 Q&A

제목 2개의 배열을 던져서 foreach문을 쓰려 하는데요..
글쓴이 ci입문자 작성시각 2012/12/14 11:08:30
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 16817   RSS


A파트 코드입니다.
----------------
----------------
B파트 코드입니다.
----------------
----------------


위에처럼 A,B파트 코드 하나가 하나의 소스로 이루어진 코드가 있습니다.
그런데, 여 A파트와 B파트에 삽입되어야 할 데이터가 다릅니다.
A파트와 B파트는 이전 컨트롤 단에서 데이터를 리턴 받은 것을 던져줘서 ,
foreach문으로 돌려서 사용하는 거거든요?

A파트와 B파트를 전체적으로 컨트롤 할 땐, 아래처럼 하면 간단했었습니다.

foreach($data as $row) :
A파트 코드입니다.
----------------
----------------
B파트 코드입니다.
----------------
----------------
endforeach;

그러면 정확하게 A파트와 B파트코드가 동일하게 반복되어 들어가거든요~
배열 크기가 3이라는 가정하에 .. 아래처럼요.
A파트 코드입니다.
----------------
----------------
B파트 코드입니다.
----------------
----------------

A파트 코드입니다.
----------------
----------------
B파트 코드입니다.
----------------
----------------

A파트 코드입니다.
----------------
----------------
B파트 코드입니다.
----------------
----------------



그래서 상관없었는데, 문제가 발생한 이유가 뭐냐면 ,
A파트와 B파트의 사용되는 배열이 다르다는 거..인데요.

아래처럼

foreach($data as $row) :
A파트 코드입니다.
----------------
----------------
endforeach;
foreach($reply as $row) :
B파트 코드입니다.
----------------
----------------
endforeach;


두 부분으로 나누어 버리면 ,

먼저 A파트 걸 다 반복해서 출력 한 다음에, B파트 껄 출력해서 ,

동일하게 나오지 않더라구요 .. 즉 .. 리턴 받은 배열크기가 3이라는 가정 하에 이런식으로 나온다는건데요

A파트 코드입니다.
----------------
----------------

A파트 코드입니다.
----------------
----------------

A파트 코드입니다.
----------------
----------------

B파트 코드입니다.
----------------
----------------
B파트 코드입니다.
----------------
----------------
B파트 코드입니다.
----------------
----------------


..하 .ㅠ 어떻게 처리할 방법이 없을까요?
 다음글 sysdate에 관하여 질문! (3)
 이전글 메일 보낼 때 CSS 질문드립니다. (10)

댓글

milosz / 2012/12/14 11:12:04 / 추천 0
 키 값이 같다고 보장할 수 있다면
 
foreach($query as $key => $query_row):
  print_r($reply[$key]);
endforeach;
 
이렇게 사용하면 됩니다.
 
그런데 키값이 같은 경우라면 join으로 한번에 같이 가져와 처리하는게 여러모로 깔끔합니다.
ci입문자 / 2012/12/14 11:15:45 / 추천 0
milosz//

음 .. 잘 이해가 안가서 그러는데, 좀 더 부연설명 해주시면 안될까요?

이 질문이, ci질문 게시판에서 방금 답변해주신 거랑 이어진거긴한데 .

$data['query'] = $this->blog_model->getAll();
$data['reply'] = $this->blog_model->replyAll();

로 view로 던져줬다고 가정했을때 ..

foreach($data as $key => $query_row): 로 쓸 수 있다는 말씀이신가요?

그리고 값을 뽑아낼때는

$key['query'] 
$key['reply'] 이렇게 쓰는거구요?ㅠ

milosz / 2012/12/14 11:41:16 / 추천 0
 $data 변수에 배열로 선언해서 view로 넘겨주면 해당 배열 이름으로 변수가 선언되어 사용할 수 있습니다.

$data['name'] = 'edward';
$data['country'] = 'australia';

$this->load->view('profile', $data);


// /view/profile.php

<?php echo $name;?>
<?php echo $country;?>

/*
결과
edward
australia
*/
 
foreach는 배열 각각의 값을 하나의 변수로 사용할 수 있게 만들어줍니다. 예를 들면,

$fruits = array('apple','orange','peach');

foreach($fruits as $fruit):
 echo '<p>' . $fruit . '</p>';
endforeach;
/*
결과
apple
orange
peach
*/
 
배열은 key와 value로 구성되어 있습니다. key값은 해당 value가 배열에 몇번째인지를 의미합니다. 예를 들면,

echo $fruits[1];
echo $fruits[2];
 /*
결과
orange
peach
*/
 
첫번째는 apple인데 왜 orange이냐면 배열은 첫번째 key 값이 0으로 시작하기 때문입니다.
 
foreach에서 이 key값을 활용하기 위해 아래와 같은 방법을 사용합니다.

foreach($fruits as $key => $fruit):
 echo '<p>'. $key . ':' . $fruit.'</p>';
endforeach;
 /*
결과
1:apple
2:orange
3:peach
*/
 
 
하나 더 예를 들면,

$burgers = array('bigmac','cheese','angus');
$prices = array( '$5.5' , '$4.3' , '$6.6' );

foreach($burgers as $key => burger):
echo '<p>'.$burger.' burger : ' . $prices[$key].'</p>';
endforeach;

/*
결과
bigmac burger : $5.5
cheese burger : $4.3
angus burger : $6.6
*/
 
ci입문자 / 2012/12/14 12:13:40 / 추천 0
milosz //

정말 친절한 설명 감사합니다 .

진짜 이해가 너무 쉽게 잘 풀어서 설명해주셨네요 ㅜ

저런 구조로 실행 되는 거였네요 .

정말 많은 도움 되었습니다 :)  감사합니다 !!
변종원(웅파) / 2012/12/14 17:55:19 / 추천 0
 두 배열의 카운트가 동일하다면

<?php
$a 
= array('green''red''yellow');
$b = array('avocado''apple''banana');
$c array_combine($a$b);

print_r($c);
?>

위 예제의 출력:

Array
(
    [green]  => avocado
    [red]    => apple
    [yellow] => banana
)