[PHP 5] foreach 문

2010/02/21 23:19 | Posted by Prescott

PHP를 공부하면서, 기존에 보지 못한 반복문이 있는데, 바로 'foreach' 함수입니다.
배열에 대해 사용하는거라 그런지, 정규식으론 이해가 잘 가지 않더군요 -_-;
예를 잡아서 써보았더니, 아. 이해가 빠릅니다. 역시 배운건 바로바로 써먹어봐야 기억에 잘남아요.

아무튼, 본론으로 들어가자면...

foreach문은 배열에 사용하는 함수인데, 배열의 갯수만큼 반복하는 함수입니다.
반복으로 끝나는 함수가 아닙니다. 반복 뿐만 하니라 반복시 해당 키의 값을 반환받을수 있다는 것입니다.
또한, 키의 값 뿐만 아니라 해당 키도 반환받을수 있습니다!


사용법은 반환 데이터의 종류에 따라 보통 두가지가 있습니다.

첫번째는, 배열의 갯수만큼 반복하며, 반복시 각 원소의 저장 값을 반환받을 수 있는 방법.
foreach($array as $value) statement;

두번째는, 배열의 갯수만큼 반복하며, 반복시 각 원소의 저장 값 뿐만 하니라 해당 키를 반환받을 수 있는 방법.
foreach($array as $key => $value) statement;


원하는 배열의 키 혹은 값을 모두 알고 싶을때, 이 foreach문을 응용한다면 쉽게 반환받을 수 있겠죠?


아래 예시를 보시면 쉽게 이해가 가실 겁니다.









결과:


foreach($a as $data) 의 사용 예

현재 $a의 데이터 : Zero

현재 $a의 데이터 : One

현재 $a의 데이터 : Two

현재 $a의 데이터 : Three

현재 $a의 데이터 : Four

현재 $a의 데이터 :

현재 $a의 데이터 : Windows Mobile, Android, iPhone OS, etc...



foreach($a as $k => $data) 의 사용 예

현재 $a의 키 : 0 / 데이터 : Zero

현재 $a의 키 : 1 / 데이터 : One

현재 $a의 키 : 2 / 데이터 : Two

현재 $a의 키 : 3 / 데이터 : Three

현재 $a의 키 : 4 / 데이터 : Four

현재 $a의 키 : 5 / 데이터 :

현재 $a의 키 : Mobile_OS / 데이터 : Windows Mobile, Android, iPhone OS, etc...





저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming > PHP' 카테고리의 다른 글

[PHP 5] foreach 문  (0) 2010/02/21
[PHP 5] 1차원 배열  (0) 2010/02/12

[PHP 5] 1차원 배열

2010/02/12 23:41 | Posted by Prescott

프로그래밍을 하다 보면 간혹 한개의 주제에 관련한 여러개의 변수를 생성해야 할 때가 있습니다.
수십개까지는 어느정도 노가다로 생성을 하면 되겠지만, 자료의 갯수가 수천개나 수만개인 경우에는 답이 없겠지요.

이럴 경우에는 편리한 '배열' 을 사용하면 됩니다.
배열은 '변수들의 집합' 이라고 생각하시면 이해하기가 쉬우실 겁니다.
배열은 키 값의 차원에 따라 '일차원 배열' , '이차원 배열', '삼차원 배열' 로 나뉘어집니다.

이번 게시물에서는, 일차원 배열에 대해 다루어보도록 하겠습니다.

일반적인 변수 생성은,
$변수명 = 데이터;
로 생성이 가능하지요?

배열이라고 변수와 별 다를거 없습니다. 뭐. 거의 똑같습니다.

1. 첫째, array 함수를 쓰는 방법.
이 방법은, 여러줄 쓸 필요도 없고 배열명도 귀찮게 일일히 안써도 되기 때문에 무지 편리합니다. 추천하는 방법입니다.

사용방법은 아래와 같습니다.
$배열명 = array(키 값 => 키 데이터);

(array 함수 안의 =>를  = 로 혼동하지 않게 주의하세요!)


2. 둘째, 일반적인 선언을 하는 방법.
이 방법은 일반적인 변수 선언과 똑같은 방법입니다.

사용방법은 아래와 같습니다.
$배열명[키 값] = 키 데이터;




참고로, 배열의 키 값이 없는것을 출력하는 경우에는, 해당 데이터를 출력하지 않습니다.
키값을 지정하지 않고 배열을 출력하는 경우에는 배열을 뜻하는 Array만 출력됩니다.

아래는 사용 예제입니다.
<?php
/*
Prescott's PHP Study


Title : 1차원 배열
Date : 2010/02/12

Author : Prescott
Homepage : http://prescott.pe.kr
*/


# Part 1. array() 함수를 이용한 1차원 배열 생성
$prog = array( 1 => "C", 2 => "C++",  3 => "Visual Basic", 4 => "Java", 0 => "PHP", PHP => "THE ANSWER"); // array( 키 이름 => 키 내용) 으로 배열을 생성, ""은 문자열을 의미
for($i = 0 ; $i <10 ; $i++) // 내용출력, 해당 키에 키 내용이 없는 데이터는 표시하지 않음.
{
echo "\$prog[$i] = $prog[$i]";
echo "<br />";
}
echo "\$prog[PHP] = $prog[PHP]<br /><br />"; // 키 이름을 지정하지 않고 배열을 출력한 경우. 배열을 의미하는 문자열인 Array만 출력된다.



echo "\$prog = $prog";
echo "<br /><br /><br />";






# Part 2. 일반적인 1차원 배열 생성
$Mobile_OS[0] = "Windows Mobile"; // $배열명[키이름] = 키값 으로 배열을 생성
$Mobile_OS[1] = "iPhone OS";
$Mobile_OS[2] = "Android";
$Mobile_OS[OMNIA2] = "Windows Mobile";

for($j = 0 ; $j < 10 ; $j ++)
{
echo "\$Mobile_OS[$j] = $Mobile_OS[$j]";
echo "<br />";
}
echo "\$Mobile_OS = $Mobile_OS";
echo "<br /><br /><br />";
?>




결과: http://prescott.pe.kr/php_study/1D_array.php
$prog[0] = PHP
$prog[1] = C
$prog[2] = C++
$prog[3] = Visual Basic
$prog[4] = Java
$prog[5] =
$prog[6] =
$prog[7] =
$prog[8] =
$prog[9] =
$prog[PHP] = THE ANSWER

$prog = Array


$Mobile_OS[0] = Windows Mobile
$Mobile_OS[1] = iPhone OS
$Mobile_OS[2] = Android
$Mobile_OS[3] =
$Mobile_OS[4] =
$Mobile_OS[5] =
$Mobile_OS[6] =
$Mobile_OS[7] =
$Mobile_OS[8] =
$Mobile_OS[9] =
$Mobile_OS = Array



저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming > PHP' 카테고리의 다른 글

[PHP 5] foreach 문  (0) 2010/02/21
[PHP 5] 1차원 배열  (0) 2010/02/12


Combiner 0.001의 소스를 짜면서...
어떻게 프로그램명과 버전정보를 가운데로 정렬할 지 막막했었는데...
문득 문자열의 길이를 int형으로 반환해주는 Strlen() 함수가 생각나서...
Strlen() 함수를 응용해보았는데, 된다 -_-b




 아래는 문자열을 가운데 정렬하는 방법의 원리이다
1. 프로그램의 가로폭(width)과 문자열(text)를 #define 으로 정해둔다.
2. Strlen() 으로 text의 길이를 훔쳐온다
(여담이지만 Strlen()이 Steal 의 p.p형인 stolen 으로 보여서 '~의 길이를 구한다' 라는 표현보단 stolen의 원형인 steal. '~의 길이를 훔치다' 라는 표현을 애용한다)
3. 가로폭의 절반에서 text 길이의 절반을 뺀 만큼 공백으로 채운다
4. text를 쓴다.


아래는 Combiner 에 적용한 소스의 일부이다..

#include <stdafx.h>
#include <string.h> // Strlen() 함수를 쓰려면 반드시 인클루드 해야한다.

// width와 text를 여기서 정해둔다.
#define width "==============================================================="
#define text "Combiner 0.001 Alpha Version"
#define text2 "Prescott (http://prescott.pe.kr)"


int main(void)
{
    int i, j;


    printf("%s\n", width);

    // 가운데정렬
    for(i=0 ; i<((strlen(width) / 2) - (strlen(text) / 2)) ; i++) printf(" ");
    printf("%s\n\n", text);
   
    // 응용하여 오른쪽 정렬
    for(j=0 ; j<(strlen(width) - strlen(text2)) ; j++) printf(" ");
    printf("%s\n\n", text2);

    printf("%s\n", width);

    return 0;
}



실행결과



참~~~~~~~~~~~~~~~~~~~~~~~ 쉽죠잉?


저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

Combiner 0.001 Alpha

2009/05/18 00:45 | Posted by Prescott




Download


Introduction

Combiner는 MPEG2 Transport Stream 동영상 (TP / TS / TRP)을 합치는 프로그램입니다.
화질의 손실이 없으며, HDTV2MPEG으로 분할한 파일을 합치는데 유용합니다.

현재 두개의 동영상만 지원하며, PMT패킷을 수정하여 출력해주는 기능은 지원하지 않습니다. (추후 개선 예정)




How To Use
1. 프로그램 내에 합칠 두 동영상을 넣습니다.
2. 합칠 두 동영상의 이름을 각각 1.tp / 2.tp로 변경해줍니다.
(합친 동영상의 순서는 파일명의 숫자순입니다. 1.tp와 2.tp가 있다면 나중에 합친 동영상에서 1.tp부터 나오겠죠?)
3. Combiner을 실행합니다. 알아서 합쳐주므로 기다리시면 됩니다.






저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming > Program' 카테고리의 다른 글

Combiner 0.001 Alpha  (0) 2009/05/18

영상처리 관련 도서...

2009/05/16 02:05 | Posted by Prescott


Visual C++을 이용한 디지털 영상처리

강동중| 사이텍미디어| 2003.03.08 | 420p | ISBN : 8955507887

- 카메라로 물체 추적에 대한 내용도 실려있다. / 저자는 이 책을 읽고 로봇대회에 나가도 된다고함.......


DirectShow 멀티미디어 프로그래밍(IT 백두대간)
신화선 | 한빛미디어 | 2002.05.30


IT EXPERT 영상 처리 프로그래밍 by Visual C++
황선규 | 한빛미디어 | 2007.05.25

















음... 일단 생각해 본 프로그램들...

1. DV 1394출력을 PC로 받아서 화면에 변동이 없으면 캡쳐 중지, 변동이 있으면 캡쳐
 * HDV가 아닌 DV를 쓰는 이유... 이미지 프로세싱에 시간이 걸려서... 컴스펙도 딸리니 -ㅁ-;
- DV 1394 출력을 프로그램으로 받을 방법에 대해 연구해야함.
- 변동이 있는것을 확인 할 방법은 [Visual C++을 이용한 디지털 영상처리] 를 참조한다.


2. Transport Stream (.ts / .tp / .trp) 파일 편집툴 (병합은 Console Programming으로도 충분히 할수있다...)
 - 지원하는 Codec은 MPEG2와 H.264이다.
 - Preview의 경우에는 DIrectshow를 이용하면 편할 것 같다 (pc에 설치된 decoder 사용)
 - 병합의 경우 Console에서 copy 명령어를 활용한다.... 주말에 만들어 봐야지!
 - 스플리터에 대해 알아봐야한다... 자주 가는 곳에서 얻은 정보에 의하면 플레이어의 스플리터와 에디터의 스플리터는 별도. 편집툴들은 대부분 자체 개발한 스플리터를 쓴다고 한다...
 - 스플리터를 알아보기 전에 버추얼덥의 Direct Stream Copy의 원리부터 알아야 할 것 같다.
 - 추후 여러 Codec을 지원하게 하도록 한다.....


3. WM용 MPEG2 TS Decoder
 - Windows Mobile OS에는 MPEG2 TS스트림을 재생시키는 프로그램이 없다.
 - CPU 성능이 딸려서 그렇겠지만, 일단 시도는 해 봐야지 ^^;
 - 모바일 펜티엄3 650Mhz에서 QAM TP가 CPU점유 70~80%를 먹어가면서 재생이 되었었는데, 요즘 스펙이 후달달한 옴니아나 엑스페리아에선 가능하지 않을까?
 - 요즘 PDA (혹은 스마트폰) 들은 CPU말고도 GPU도 있다. 듣기로는 GPU에 하드웨어가속이 붙어져 있다고 하던데?! 활용할 수 없을까?


4. 간단한 이미지파일 보정툴
 - BMP, JPG, GIF, PNG 그리고 RAW 포맷을 지원한다
 - 샤픈, 블러, 리사이즈, 크롭을 구현해본다
 -  [참고] bitmap 파일 구조 http://www.daubnet.com/formats/BMP.html
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

2009 2/4분기 계획

2009/05/13 02:06 | Posted by Prescott


<우선순위순>

0. Algorithm, 이산수학 그리고 C++ 보충
1. API Programming 공부
2. 대학진학계획 작성
3. KOI (정보올림피아드) 공모부문 준비 및 가능하다면 출품

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming > ToDo List' 카테고리의 다른 글

2009 2/4분기 계획  (0) 2009/05/13

이전 1 다음