PHP

일차원 배열

 

변수에는 한 개의 값을 저장할 수 있지만 배열에는 여러 개의 값을 저장할 수 있다. 예를 들어 5개의 값을 저장하기 위해서는 변수를 사용하는 경우 5개의 변수가 필요하지만 배열을 사용하면 5개의 공간을 가지고 있는 한 개의 배열로 저장이 가능하다.

배열에서 가장 간단한 형태가 1차원 배열이라 할 수 있다. PHP에서 1차원 배열을 사용하하려면, 배열명 앞에 $를 붙여야 하고 뒤에는 []를 붙인다. [] 안에는 배열 첨자를 0부터 시작하여 입력하고, 만약 배열 첨자를 입력하지 않았을 때에는 자동으로 배열 첨자를 1씩 증가한다.

배열에서 데이터 타입이란 배열에 저장될 초기화 데이터에 따라 데이터 타입이 결정되며[]속의 크기는 데이터의 개수만큼 생기고[] 이 하나인 경우를 1차원 배열이라고 한다.

 

$a[0] =10;

$a[1] =20;

$a[] =30;

$a[]=40;

 

다음의 예제는 일차원배열 $a[]을 초기화해주고, 출력하는 프로그램으로 $a[0] =10; 과 $a[1]=20; 은 첨자를 써준 경우이고, $a[]=30; 은 첨자를 생략한 경우이지만 자동으로 $a[2] =30; 과 동일한 경우이다.

 

     $a[0] = 10;  $a[1] = 20;       //  배열 첨자를 써준 경우

     $a[ ] = 30;  $a[ ] = 40;       //  배열 첨자를 생략한 경우

     for ($i = 0; $i <= 3; $i++)

         echo “배열 a[” . $i . “]번째는  ” . $a[$i] . “이다.

?>

->출력

배열 a[0]번째는 10이다.
배열 a[1]번째는 20이다.
배열 a[2]번째는 30이다.
배열 a[3]번째는 40이다.

 

PHP에서는 다양한 배열할수를 지원하고 있다. 여기에서 중요한 array()함수에 대하여 먼저 알아보겠다. associative 배열에 값을 저장하는 간단한 방법으로 array()명령을 사용하는 방법이 있다. 변수 $a에 array()함수를 이용하여 초기화해보다.

 

방법1) $a[0] =10;       $a[1] =20;    $a[2] =30;  $a[4] =40;

 

방법2) $a = array(10, 20, 30, 40);

 

위의 배열 $a[]의 초기화 방법은 방법1) , 방법2) 가 동일하다.

위의 예제 “subscript.php”를 array()함수를 이용하여 “array_init.php”와 같이 프로그램이 가능하다.

 

     $a = array(10, 20, 30,40);

     for ($i = 0; $i <= 3; $i++)

         echo “배열 a[” . $i . “]번째는 ” . $a[$i] . “이다.

?>

->출력

배열 a[0]번째는 10이다.
배열 a[1]번째는 20이다.
배열 a[2]번째는 30이다.
배열 a[3]번째는 40이다.

 

 

6.2 다차원 배열 (Multi-Dimensional Arrays)

 

2차원 이상의 배열을 다차원 배열이라 하며 다차원 배열이라 하더라도 실제로 매우 간단하다. 배열의 각 차원에 대하여 단지 [key]값을 뒤에 붙여주면 된다.

 

 

다음의 multi_array.php 프로그램은 2차원 배열의 데이터를 초기화 해주고 출력하는 프로그램으로 배열$[1][]=30; 과 같이 열의 첨자를 생략해 줄 수 있다.

     $a[0][0] = 10;  $a[0][1] = 20;        //  배열 첨자를 써준 경우

     $a[1][ ] = 30;  $a[1][ ] = 40;        //  배열 첨자를 생략한 경우  

     for ($i = 0; $i < 2; $i++) {

         for ($j = 0; $j < 2; $j++)

            echo “배열 a[” . $i . “][” . $j . “]번째는 ” . $a[$i][$j] . “이다.

     }

?>

->출력

 

배열 a[0][0]번째는 10이다.
배열 a[0][1]번째는 20이다.
배열 a[1][0]번째는 30이다.
배열 a[1][1]번째는 40이다.

 

 

6.3문자열 배열 (String Arras)

 

지금까지는 배열의 첨자에 숫자를 사용하였다. 그러나 배열의 첨자에 문자열을 사용할 수 있다. 다음은 배열에 변수 $f의 데이터 값(홍길동)으로 초기화 해준 예이다.

$f =“홍길동”;

$a[1] =$f; //1차원 배열 :첨자는 숫자

$a[“tmp”] =$f;  //1차원 배열: 첨자가 문자열

$a[1][0] =$f; //2차원 배열

$a[“tmp”][2] =$f; //배열의 첨자를 숫자와 문자열을 사용

$a[3][“bar”]=$f; //배열의 첨자를 숫자와 문자열을 사용

$a[“tmp”][4][“bar”][0]=$f; //4차원 배열

 

다음의 예제는 $a[1]=“이순신” 과 같이 배열의 첨자가 숫자인 것과 $a[“age”]=“20” 과 같이 첨자가 문자열인 경우에 배열을 초기화하고 출력하는 프로그램이다.

 

     $f = “홍길동”

     $a[1] = “이순신”

     $a[“name”] = $f;               //  $a[“name”]에 변수 $f(“홍길동”)로 초기화

     $a[“age”] = “20”

     echo “배열 a[1] =>” . $a[1] .  “

     echo “배열 a[name] => ” .  $a[“name”] . “

     echo “배열 a[age] => ” . $a[“age”] . “

?>

->출력

배열 a[1] =>이순신
배열 a[name] => 홍길동
배열 a[age] => 20

 

PHP3에서는, 문자열 내에서 다차원 배열의 값을 직접 접근하는 것은 불가능하다. 예를 들어 다음과 같은 문장은 원하는 결과를 얻지 못할 것이다.

$a[3][‘bar’]=’Bob’;

echo “this won’t work:$a[3][bar]”;

 

PHP3에서 위의 출력은 wont’work:Array[bar]일 것이다. 원하는 결과를 얻으려면 연결 연산자(.)를 사용하여야 할 것이다.

$[a][‘bar’]=’Bob’;

echo “This will work:” . $a[3][bar];

PHP4/PHP5에서는 접근하려는 배열식을 중괄호({})로 둘러쌈으로써 가능하게 만들어 준다.

 

$a[3][‘bar’]=’Bob’;

echo “This will work :{$a[3][bar]}”;

 

위의 예제 string_array.php를 중괄호({})을 이용하여 출력하는 프로그램은 다음과 같다. 주의할 점은 {$a[1]}의 중괄호를 기술할 때 공백이 없이 써준다. {$a[1]}이와 같이 공백이 있으면“{이순신}”과 같이 출력된다.

     $f = “홍길동”

     $a[1] = “이순신”

     $a[“name”] = $f;    //  $a[“name”]에 변수 $f(“홍길동”)로 초기화

     $a[“age”] = “20”

     echo “배열 a[1] => {$a[1]} 
” ;

     echo “배열 a[name] => {$a[“name”]} 
” ;

     echo “배열 a[age] => {$a[“age”]} 
” ;

?>

 

->출력

배열 a[1] => 이순신
배열 a[name] => 홍길동
배열 a[age] => 20

 

6.4 배열 함수(Array Function)

 

PHP는 다양한 배열 함수를 지원하고 있다. 이미 6.1에서 array() 함수는 사용해 보았지만, 그 외에도 여러 가지의 배열 함수가 있다.

 

6.4.1 array[]함수

 

여러 가지 방법으로 문자열 배열에 값을 넣을 수 있으나, associative 배열에 값을 저장하는 간단한 방법으로 array() 함수를 사용하는 방법이 있다. 우선 다음의 두 가지 코드는 일차원 배열에 값을 저장하는 방법으로 결과는 동일하다. 이때 =>연산자는 배열 필드의 포인트나 인덱스 기능을 가진다.

 

6.4 배열 함수(array Function)

 

PHP는 다양한 배열 함수를 지원하고 있다. 이미 6.1에서 array()함수는 사용해 보았지만, 그 외에도 여러 가지의 배열 함수가 있다.

 

6.4.1 array{} 함수

 

여러 가지 방법으로 문자열 배열에 값을 넣을 수 있으나, associative 배열에 값을 저장하는 간단한 방법으로 array() 함수를 사용하는 방법이 있다. 우선 다음의 두 가지 코드는 일차원 배열에 값을 저장하는 방법으로 결과는 동일하다. 이때 => 연산자는 배열 필드의 포인트나 인덱스 기능을 가진다.

$fruit[“color”]  =“red”; //방법1

$fruit[“taste”] =“sweet”;

$fruit[“shape”] =“round”;

$fruit[“name”] =“apple”;

$fruit[3] =4;

 

$fruit =array(

     “color” => “red”,

     “taste” => “sweet”,

     “shape” => “round”,

     “name” => “apple”,

     3    =>4);

 

 

다음의 예제는 array()배열 함수를 이용하여 문자열 배열을 $fruit에 초기화 하고 있다. “color”=>“red”에서 “color”는 배열의 첨자이고 “red”저장되는 데이터 값이다. 배열의 첨자나 데이터 값 모두 한글, 영문이 가능하다.

 

   $fruit = array(                  

                “color”  => “red”,

                “taste”  => “sweet”,

                “모양”   => “원형”,

                “이름”   => “사과”,

                 3        => 4  );

    echo “fruit[color] : {$fruit[“color”]}, fruit[taste] : {$fruit[“taste”]} 
” ;

    echo “fruit[모양] : {$fruit[“모양”]}, fruit[이름] : {$fruit[“이름”]} 
” ;

    echo “fruit[3] => {$fruit[3]} 
” ;

?>

->출력

fruit[color] : red, fruit[taste] : sweet
fruit[모양] : 원형, fruit[이름] : 사과
fruit[3] => 4

 

위의 예제에서 사용하고 있는 “=>”연산자는 배열 필드에 대한 포인터 기능을 가지고 있으며, 만약에 정수와 함께 사용하면 인덱스 기능을 가진다.

 

다음은 배열의 인덱스 기능을 가지고 있는 예를 들어보겠다.

 

      $fruit  = array(“사과”, “배”, 3=>“수박”, “참외”, 6=>“포도”, “딸기”);

      for ($i = 0; $i < 8; $i++)

            echo “fruit[$i] : {$fruit[$i]} 
” ;

?>

 

위의 예제는 array() 함수를 이용하여 배열 초기화시 무조건 첨자는 0부터 시작되지만, 정수와 =>연산자를 사용하여 인덱스 기능을 이용하면 임의로 첨자를 정할 수 있다.  출력결과와 같이 $fruit[0] 은 사과가 출력되고, $fruit[3]은 수박, $fruit[4]는 참외를 출력한다. 인덱스 기능을 사용하지 않으면 첨자 값이 1씩 증가하는 것을 알 수 있다.

 

fruit[0] : 사과
fruit[1] : 배

Notice: Undefined offset: 2 in C:\AutoSet9\public_html\myone\6\fun_array2.phpon line 4
fruit[2] :
fruit[3] : 수박
fruit[4] : 참외

Notice: Undefined offset: 5 in C:\AutoSet9\public_html\myone\6\fun_array2.phpon line 4
fruit[5] :
fruit[6] : 포도
fruit[7] : 딸기

 

다음은 array() 함수를 2차원 문자열 배열에 사용한 예제이다.

 $fruit = array(          //  2차원 문자열 배열

  “사과” => array(“색상” => “빨강”, “맛” => “단맛”, “모양” => “원형”),

  “오렌지” => array(“색상” => “오렌지”, “맛” => “신맛”, “모양”  => “원형”),

  “참외”  => array(“색상” => “노랑”, “맛” => “단맛”, “모양” => “타원형”)

  );

  echo ” 사과의 색상 : {$fruit[“사과”][“색상”]} 
”  

  echo ” 오렌지의 맛 : {$fruit[“오렌지”][“맛”]} 
”  

  echo ” 참외의 모양 : {$fruit[“참외”][“모양”]} 
”  

?>

$fruit[][]배열은 3행 3열로 초기화 되었다.

 

->출력

사과의 색상 : 빨강
오렌지의 맛 : 신맛
참외의 모양 : 타원형

 

 

6.4.2 list[] 함수와 ech() 함수

 

list()함수는 배열의 값을 임의로 추출할 때 사용하며 데이터베이스의 Table에서 한 행을 추출할 때도 사용한다. each() 함수는 배열 전체를 순회하면서 배열의 key값과 value 값을 반환해 주고 포인터가 1씩 증가한다.

다음은 list()함수와 each()함수를 사용한 예제이다.

list($key, $value) =each($fruit);

 

위의 list($key, $value) =each($fruit);에서 each()함수는 fruit배열을 탐색한다. each($fruit)을 통해 $fruit 배열을 넣으면 첫 번째 포인터의 key값 “0”과 value 값 “사과”를 반환하고 list()가 $key와 $value로 받고 for 루프를 한번 돌면 each에서 포인터는 하나 증가하게 된다. list()함수는 $key에는 배열의 첨자가 저장되고 $value에는 값이 저장된다.

 

$fruit =array(“사과”, “배”, “수박”, “참외”, “딸기”);

 

for($i=0; $i<5; $i++){

 

    list($key, $value) =each($fruit);

 

     echo “fruit[$key] :  $value“.“

}

 

?>

->출력

fruit[0] : 사과
fruit[1] : 배
fruit[2] : 수박
fruit[3] : 참외
fruit[4] : 딸기

 

 

 

6.4.3 count[]함수와 sizeof() 함수

count() 함수는 배열의 크기를 반환하는 함수로서 for문에 주로 많이 사용된다. 같은 기능을 가지는 함수로 sizeof()함수가 있다. count() 함수를 사용하면 배열의 원소 개수를 셀수 있다.

 

다음은 “list.php”의 for문을 count()함수를 이용하여 for문을 수정한 것으로 “count.php”를 작성한 예제이다.

$c =count($fruit);

 

count($fruit)는 배열의 크기를 반환하기 때문에 5를 $c에 반환하고 있다.

 

$fuit =array(“사과”, “배”, “수박”, “참외”, “딸기”);

$c =count($fuit);

echo “fruit 배열이 크기 : $c 

 

  for($i=0; $i

 

       list($key, $value) =each($fuit);

 

       echo “fruit[$key] : $value“ . “

 

}

 

 

 

?>

->출력

fruit 배열이 크기 : 5
fruit[0] : 사과
fruit[1] : 배
fruit[2] : 수박
fruit[3] : 참외
fruit[4] : 딸기

 

 

다음은  “count.php”의 count() 함수를 sizeof()함수로 대체하여 만든 예제이다. $c=sizeof($furit)“는 $fruit 배열으리 크기를 반환하기 때문에 5를 반환하고 있다.

 

$fuit =array(“사과”, “배”, “수박”, “참외”, “딸기”);

$c =count($fuit);

echo “fruit 배열이 크기 : $c 

 

for($i=0; $i< sizeof($fuit); $i++){

 

    list($key, $value) =each($fuit);

 

     echo “fruit[$key] : $value“ . “

 

}

 

 

 

?>

fruit 배열이 크기 : 5
fruit[0] : 사과
fruit[1] : 배
fruit[2] : 수박
fruit[3] : 참외
fruit[4] : 딸기

->출력

 

6.4.4 인덱스 배열

 

배열이 $name[1], $name[3], $name[4]처럼 비연속적인 인덱스로 저장된 경우 어떻게 참조할 것인가를 알아보자. each() 함수를 불러들일 때 마다 배열 포인터를 하나씩 이동시킨다. 이를 불러들여 list() 함수를 이용하여 $key 와 $current를 이동시킨다.

 

 list($key, $current) =each($name);

 

      $name[1] = “이순신”

      $name[3] = “강감찬”

      $name[4] = “홍길동”

      for ($i = 0; $i < count($name); $i++) {  //  count( ) 함수 사용 : 3을 반환

             list($key, $current) = each($name);

             echo “name[$key] : $current 
” ;

      }

?>

->출력

name[1] : 이순신
name[3] : 강감찬
name[4] : 홍길동

 

정수형 인덱스뿐만 아니라 문자열 인덱스도 사용이 가능하다. 문자열 인덱스도 정수형 비연속적인 인덱스 배열을 참조하는 방법은 동일하다.

 

다음은 비연속적인 문자열 인덱스로 저장된 배열을 출력하는 예제로 while()문을 사용하였다.

 

      $name[1] = “이순신”

      $name[3] = “강감찬”

      $name[4] = “홍길동”

      for ($i = 0; $i < count($name); $i++) {  //  count( ) 함수 사용 : 3을 반환

             list($key, $current) = each($name);

             echo “name[$key] : $current 
” ;

      }

?>

->출력

name[1] : 이순신
name[3] : 강감찬
name[4] : 홍길동

 

위의 예제와 같이 인덱스 배열을 1차원 뿐만 아니라 다차원에서도 사용이 가능하다.

다음은 역사적인 인물의 이름을 2행 3열로 구성한 $name[2][3]의 2차원 정수형 인덱스 배열을 출력하는 예제이다.

      $name[1][1]  = “이순신”

      $name[1][2]  = “강감찬”

      $name[1][3]  = “홍길동”

      $name[2][1]  = “태조”

      $name[2][2]  = “세종”

      $name[2][3]  = “예종”

      

      while(list($key, $current)=each($name)){

      

        while(list($key1, $current)=each($name[$key])){

         echo “name[$key][$key1] : $current 

         }

      }

      

      

      

?>

->출력

name[1][1] : 이순신
name[1][2] : 강감찬
name[1][3] : 홍길동
name[2][1] : 태조
name[2][2] : 세종
name[2][3] : 예종

 

다음은 과일의 이름과 속성을 3행 3열로 구성한 $furit[3][3]의 2차원 문자열 인덱스 배열을 출력하는 예제이다. array() 함수를 이용하여 $fruit 의 행의 값은 과일의 종류를 열의 값은 색상, 맛, 모양 등의 속성 값을 초기화 하였다.

 $fruit = array(          //  2차원 문자열 배열

  “사과” => array(“색상” => “빨강”, “맛” => “단맛”, “모양” => “원형”),

  “오렌지” => array(“색상” => “오렌지”, “맛” => “신맛”, “모양”  => “원형”),

  “참외”  => array(“색상” => “노랑”, “맛” => “단맛”, “모양” => “타원형”)

  );

  echo ” 사과의 색상 : {$fruit[“사과”][“색상”]} 
”  

  echo ” 오렌지의 맛 : {$fruit[“오렌지”][“맛”]} 
”  

  echo ” 참외의 모양 : {$fruit[“참외”][“모양”]} 
”  

?>

 

->출력

 $fruit = array(          //  2차원 문자열 배열

  “사과” => array(“색상” => “빨강”, “맛” => “단맛”, “모양” => “원형”),

  “오렌지” => array(“색상” => “오렌지”, “맛” => “신맛”, “모양”  => “원형”),

  “참외”  => array(“색상” => “노랑”, “맛” => “단맛”, “모양” => “타원형”)

  );

while ( list($key, $current) = each($fruit)) {     // 2차원 문자열 인덱스 배열

                while ( list($key1, $current) = each($fruit[$key])) {

                        echo “fruit[$key][$key1] : $current 
” ;

                }

      }

?>

->출력

fruit[사과][색상] : 빨강
fruit[사과][맛] : 단맛
fruit[사과][모양] : 원형
fruit[오렌지][색상] : 오렌지
fruit[오렌지][맛] : 신맛
fruit[오렌지][모양] : 원형
fruit[참외][색상] : 노랑
fruit[참외][맛] : 단맛
fruit[참외][모양] : 타원형

 

위의 예제에서 사용한 다중 while문은

while ( list($key, $current) = each($fruit)) {     // 2차원 문자열 인덱스 배열

                while ( list($key1, $current) = each($fruit[$key])) {

                        echo “fruit[$key][$key1] : $current 
” ;

                }

      }

 

$key 에는 행의 첨자, $key1에는 열의 첨자, $current 에는 데이터 값을 초기화하였다.

 

 

6.4.5 배열의 정열

 

PHP 는 배열의 정렬에 많은 함수들을 제공하고 있다. 배열은 정렬을 원하는 형식에 딸 sort(), resort(), asort(), arsort(), ksort(), usrot(), uasort(), uksort() 함수들을 이용해 순서대로 정렬할 수 있다. 그리고 next() 와 prev() 함수를 이용하여 배열의 이전과 이후의 내용을 탐색할 수 있다. 배열의 내용을 탐색하는 방법으로 serarch() 함수를 사용할 수도 있다.

 

 다음은 sort() 함수를 이용하여 $name1 배열에 저장된 이름을 오름차순 정렬해주고, rsort()함수를 이용하여 $name2 배열에 저장된 이름을 내림차순(역순) 정렬해서 정렬된 배열을 출력해 주는 예제이다.

      $name1=array(3=>“이순신”, “홍길동”, 7=>“강감찬”, “김유신”);

      $name2=array(5=>“홍명보”, “황선홍”, 8=>“안정환”,“차돌이”);

      sort($name1);

      rsort($name2);

      

      while(list($key, $value)=each($name1)){

      echo “name1[$key] : $value 

      }

      

      echo “

      

      

      

    for ($i = 0; $i < count($name2); $i++) {     // 이름 내림차순(역순) 출력

             list($key, $current) = each($name2);

             echo “name2[$key] : $current 
” ;

      }

 

 

?>

 

->출력

name1[0] : 강감찬
name1[1] : 김유신
name1[2] : 이순신
name1[3] : 홍길동

name2[0] : 황선홍
name2[1] : 홍명보
name2[2] : 차돌이
name2[3] : 안정환

 

위의 출력 결과와 같이 sort()와 rsort()함수는 정수형 인덱스나 문자열 인덱스의 경우 정수형 인덱스 배열 체꼐로 바뀌고 시작 인덱스도 0으로 고정된다. 이렇게 인덱스가 0으로 고정되는 것을 방지하기 위하여 asort(), arsort(), ksort() 함수를 사용한다.

다음은 asrot() 함수를 이용하여 $name1 배열에 저장된 이름을 오름차순 정렬하자 배열의 인덱스(첨자) 값은 원래 입력한 대로 $key에 저장한다. arsort() 함수를 이용하여 $name2 배열에 저장된 이름을 내림차순(역순) 정렬하나 배열의 인덱스(첨자) 값은 원래 입력한 대로 $key에 저장하고 정렬된 배열을 출력해 주는 예제이다. ksort() 함수를 이용하여 $name3 배열에 저장된 이름을 배열의 인덱스(첨자)값으로 오름차순 정렬한다. 만약, 인덱스가 정수인 경우에는 사용할 필요가 없고, 문자열일 때만 사용한다.

      $name1 = array(3=> “이순신”, “홍길동”, 7=> “강감찬”, “김유신”);

      $name2 = array(5=> “홍명보”, “황선홍”, 8=> “안정환”, “차돌이”);

      $name3 = array(“a3”=> “이천수”, “a1” => “최태욱”, “a2” => “이동국”);

      asort($name1);   // asort( ) 함수 사용 : 오름차순 정렬

      arsort($name2);  // arsort( ) 함수 사용 : 내림차순 정렬

      ksort($name3);   // ksort( ) 함수 사용 : 인덱스 오름차순 정렬

 

    

      

      while (list($key, $current)=each($name1)){  //이름 오름차순 정렬

      echo “name1[$key] : $current 
” ;

      }

      

      echo “

      

      for ($i = 0; $i < count($name2); $i++) {       // 이름 내림차순 출력

             list($key, $current) = each($name2);

             echo “name2[$key] : $current 
” ;

      }

      

      echo “

      

      for ($i = 0; $i < count($name3); $i++) {       // 인덱스 오름차순 출력

             list($key, $current) = each($name3);

             echo “name3[$key] : $current 
” ;

      }

?>

->출력

name1[7] : 강감찬
name1[8] : 김유신
name1[3] : 이순신
name1[4] : 홍길동

name2[6] : 황선홍
name2[5] : 홍명보
name2[9] : 차돌이
name2[8] : 안정환

name3[a1] : 최태욱
name3[a2] : 이동국
name3[a3] : 이천수

 

위의 결과와 같이 $name1 배열은 인덱스 값($key)과 상관없이 $current값을 오름차순 정렬하고, $name2 배열은 인덱스 값($key) 과 상관없이 $current 값을 내림차순 정렬하고, $name3 은 $current 값과 상관없이 인덱스 값($key) 으로 오름차순 정렬한다.

 

 

비교 함수 이용 정렬

 

usrot(), uasort(), uksort() 함수는 비교함수(compare_function) 인자로 지정된 함수를 사용자 정의 비교 함수로 이용해서 배열을 정렬한다. 사용자 정의 비교함수는 두 개의 인자를 받고, 부호 있는 정수(singned integer)를 돌려주는 것이어야 하고, 두 인자가 제대로 정렬 되어 있으면(즉, 자리를 바꿀 필요가 없을 경우) 음의 값을, 그 반대이면 양의 값을 돌려 주어야 한다.

 

다음 예제는 usrot(), uasort(), uksort() 함수를 사용하여 비교함수 compare()에서 정수형 배열 비교하였다. 데이터 값이 정수일 때는 $name의 데이터 앞 뒤의 값을 비교하여 데이터값을 오름차순 정렬하여 준다.

 

      

function compare1($left, $right){

    return( $left >$right) ? 1 :-1 ;  //오름참순 정렬;

}

 

function compare2($left, $right){

     return ($left > $right ) ? -1 :1; //내림차순 정렬;

}

 

$num1 =array(7, 3, 6,1,9);

$num2 =array(7, 3, 6, 1, 9);

$num3 =array(7, 3, 6, 1, 9);

echo “usort =>”

 

usort($num1, “compare1”);  //usort() 함수 사용 :오름차순 정렬

 

while (list($key, $current) =each($num1)){

    echo “num1[$key] : $current ,”

}echo “
uasort =>”

 

 

uasort($num2, “compare2”);

while (list($key, $current) =each($num2)){ //uasort() 함수 사용 :내림차순 정렬

            echo “num1[$key] : $current ,”

}echo “
ukasort =>”

 

 

uksort($num2, “compare1”);

while (list($key, $current) =each($num3)){ //uasort() 함수 사용 :$key 오름차순 정렬

   echo “num1[$key] : $current ,”

}

      

      

?

->출력

usort =>num1[0] : 1 ,num1[1] : 3 ,num1[2] : 6 ,num1[3] : 7 ,num1[4] : 9 ,
uasort =>num1[4] : 9 ,num1[0] : 7 ,num1[2] : 6 ,num1[1] : 3 ,num1[3] : 1 ,
ukasort =>num1[0] : 7 ,num1[1] : 3 ,num1[2] : 6 ,num1[3] : 1 ,num1[4] : 9 ,

 

다음 예제는 usrot(), uasrot(), uksort() 함수를 사용하여 비교함수 compare()에서 문자열 배열 $name을 비교하였다. 문자열 배열인 경우에는 배열의 데이터 값을 비교하지 않고$key값을 비교하여 usrot(), uksort() 함수는 인덱스 $key값에 따라 오름차순 정렬하여 주고 usrot() 함수는 인덱스 $key값에 따라 내림차순 정렬한다.

      

function compare1($left, $right){

  return( $left >$right) ? 1 :-1 ;  //오름참순 정렬;

}

 

function compare2($left, $right){

  return ($left > $right ) ? -1 :1; //내림차순 정렬;

}

 

$num1 =array(7, 3, 6,1,9);

$num2 =array(7, 3, 6, 1, 9);

$num3 =array(7, 3, 6, 1, 9);

echo “usort =>”

 

usort($num1, “compare1”);  //usort() 함수 사용 :오름차순 정렬

 

while (list($key, $current) =each($num1)){

  echo “num1[$key] : $current ,”

}echo “
uasort =>”

 

 

uasort($num2, “compare2”);

while (list($key, $current) =each($num2)){ //uasort() 함수 사용 :내림차순 정렬

  echo “num1[$key] : $current ,”

}echo “
ukasort =>”

 

 

uksort($num2, “compare1”);

while (list($key, $current) =each($num3)){ //uasort() 함수 사용 :$key 오름차순 정렬

  echo “num1[$key] : $current ,”

}

      

      

?>

->출력

name 표준
name[0] : 김남일
name[1] : 안정환
name[2] : 차돌이
name[3] : 최태욱
=================
uasort( ): 인덱스 내름차순정렬
name1[1] : 김
name1[2] : 안
name1[0] : 정
name1[3] : 차
=================
uasort( ): 인덱스 내름차순정렬
name1[3] : 차
name1[0] : 정
name1[2] : 안
name1[1] : 김
=================
ksort( )인덱스 오름차순 정렬
name2[a1] : 안
name2[a2] : 정
name2[a3] : 김
name2[a4] : 차

 

6.4.6 배열 포인터 함수(array pointer function)

 

배열의 포인터를 이동해주는 함수로 current(), next(), prev() 함수가 있고, 배열의 첨자 값을 반환하는 함수로 key(), array_search() 함수가 있다. reset() 함수는 배열 요소 시작 포인터인 첫 번째 요소로 이동한다. current()함수는 PHP 의 내부적인 포인터가 가리키는 현재의 배열 요소 값을 돌려준다. 이동이 없을 때는 기본적으로 포인터는 배열의 첫 번째 요소를 가리킨다. next() 함수는 배열 요소의 다음 포인터로 이동하고, prev() 함수는 배열 요소의 이전 포인터로 이동한다. key() 함수는 배열의 첨자 값을 반환하는 함수이고, array_search() 함수는 배열의 요소 값을 탐색하여 배열의 첨자 값을 반환한다. 다음 예제는 위에서 설명한 함수를 이용하여 배열이 현재 위치와 배열 포인터의 이전과 이후의 내용을 탐색하는 예제이다.

 

 

      $name = array(1=>“강감찬”, “이성계”, 10=>“이순신”, “홍길동”);

      while( list($key, $current) = each($name)) {

             echo “name[$key] : $current, “ ;

      } echo “=====================================================================

      reset($name);  // reset($name) : 1차원 배열 시작 포인터로 이동

      $current_name = current($name); // current($name) : 시작 포인터 “강감찬”

      echo “next() 함수 수행전 이름 : $current_name 
” ;

      $current_name = next($name);   // next($name) : 두 번째 포인터 “이성계”

      echo “next() 함수 수행후 이름 : $current_name 
” ;

      $current_name = next($name);   // next($name) : 세 번째 포인터 “이순신”

      echo “next() 함수 수행후 이름 : $current_name 
” ;

      $current_name = prev($name);   // prev($name) : 두 번째 포인터 “이성계”

      $current_key = key($name);     // key($name) : 배열의 첨자 값 반환

      echo “prev() 함수 수행후 이름 : $current_name, key() 함수 수행 후 이성계 첨자 값 : $current_key 
”;

      $current_key = array_search(“홍길동”, $name);      // array_search(“홍길동”, $name) : 홍길동 첨자 값 반환

      echo “array_search() 함수 수행후 홍길동 첨자 값 : $current_key 
” ;

 

      

echo reset($name).“

echo next($name).“

echo next($name).“

echo prev($name).“

echo key($name);

?>


->출력

name[1] : 강감찬, name[2] : 이성계, name[10] : 이순신, name[11] : 홍길동, =====================================================================
next() 함수 수행전 이름 : 강감찬
next() 함수 수행후 이름 : 이성계
next() 함수 수행후 이름 : 이순신
prev() 함수 수행후 이름 : 이성계, key() 함수 수행 후 이성계 첨자 값 : 2
array_search() 함수 수행후 홍길동 첨자 값 : 11
강감찬
이성계
이순신
이성계
2

 

6.4.7 난수 관련 함수(pseudorandom number function)

range(integer lowest, integer highest) 함수는 랜덤하게 값을 출력할 때 많이 사용한다.

lowest 인자의 값 보다 크거나 같고, highest 인자의 값보다 작거나 같은 범위의 숫자를 출력한다. 예를 들어 1부터 20까지의 난수를 발생시키고자 한다면 $num =rage(1, 20); 와 같이 기술하면 된다.

 

rand(integer lowest, integer highest) 함수는 위의 range() 함수와 인자의 값은 동일하나 만약 생략하면 lowest 는 0, highest 는 getrandmax() 함수의 반환 값(최대 값) 을 사용한다.

 

getrandmax() 함수는 rand() 함수가 발생시키는 가장 큰 난수 값을 반환하다.

 

srand(integer seed) 함수는 다른 난수열을 선택한다. rand() 함수를 호출하기 전에 이 함수를 호출하는 것이 좋다.

 

shuffle(array array) 함수는 배열의 내용을 무작위하게 바꾸고 싶을 때 사용하는 함수이다.

 

다음 예제는 3.4.1에서 설명한 get 메소드를 이용하여 rand.html 에 rand.php를 호출하고 호출시 value값(20) 을 가지고 호출한다.

                        

 

 난수 (Rand)함수 

 

     

     

     

     

 

 

isset($_GET[“value”]) ? $value =$_GET[“value”] : $value=null

    

    if($value!=null){

$num = range(1, $value);

 

srand(time());  //이 프로그램에 없어도 된다.

 

shuffle($num);  //무작위 변경

while (list($key, $number) = each($num)){

echo “$number “

}

    }

             

?>

->출력

13 18 9 8 10 11 6 3 4 14 7 20 1 19 17 5 16 2 15 12

 

위의 rand.html 스크립트에서 value 값을 20으로 입력하고 “확인”버튼을 선택하면 “rand.php”를 호출한다. 아래에서 “$num =rage(1, $value);” 은 1부터 20($value)까지에 해당하는 범위의 숫자를 발생하여 $num 배열에 저장하고 , srand() 함수를 이용하여 다른

난수열을 선택한다. shuffle() 함수를 이용하여 $num 배열에 저장된 1~20 사이의 난수를 만들어 주고 while() 반복문은 list() 함수와 each() 함수를 이용하여 $number에 값을 저장하고 화면에 출력해 주는 예제이다.

 

 

6.4.8 기타 배열 관련 함수 (others array relation function)

 

폼 필드를 사용해 클라이언트에서 서버로 데이터를 전달해 줄 수 있는데 감춰진 폼 필드는 화면에 출력은 안 되지만 쿠키처럼 클라이언트 컴퓨터에 데이커를 저장하거나 서버 컴퓨터에 정보를 남겨둘 수 있다.

 

감취진 폼 필드는 다음과 같이 정의한다.

 

d위에서 $ListBox1″ 으로 받은 변수 값을 hidden name 으로 Coursel1″로 저장하나 스크립트에는 출력되지 않는다.

다음 예제 meal.php에서 본인이 좋아하는 식사 메뉴(비후스테이크)를 선택하고 “확인”버튼을 선택하면 liquor1.php를 호출하면서 $ListBox1 값으로 전달한다.

 

mail.php

 

 

 

Insert title here

 

 

         $menu1 = array(“비후스테이크(15000원)”, “함박스테이크(10000원)”, “비후까스(9000원)”, “돈까스(7000원)”);

 

?>

 

본인이 좋아하는 식사 선택 :

 

while (list($key, $value)=each($menu1)){

echo “

 

 

}

?>

 

  

 

 

 

 

 

 

 

 

본인이 좋아하는 식사 선택 :
메뉴 선택…
비후스테이크(15000원)
함박스테이크(10000원)
비후까스(9000원)
돈까스(7000원)

 

다음 예제 liquor1.php에서 본인이 좋아하는 술 종류(백포도주)를 선택하고 “확인” 버튼을 선택하면 request1.php를 호출하면서 $ListBox2 값으로 전달하고 meal.php에서 넘겨받은 $ListBox1 값은 $Curse1으로 저장한다.

 

 

 

Insert title here

 

 

          $menu2 = array(“양주(100000원)”, “백포도주(70000원)”,  “적포도주(50000원)”, “맥주(4000원)”);

?>

 

본인이 좋아하는 술 선택 :

 

while (list($key, $value)=each($menu2)){

echo “

 

 

}

?>

 

  

>

 

 

 

 

$ListBox1=$_POST[“ListBox1”];

echo $ListBox1;

}

?>

 

 

 

본인이 좋아하는 술 선택 :
메뉴 선택…
양주(100000원)
백포도주(70000원)
적포도주(50000원)
맥주(4000원)

 

비후스테이크(15000원) 

 

 

 

 

 

 

무료배송 경품

쉽게 배우는 PHP 프로그래밍 

G 734 | 개정판

정진용 , 정병열 지음 | 글로벌 | 2015년 02월 27일 출간 이 책의 개정정보 : 2013년 출간

5점 만 
                                     
                    				  
                    				  
                    				    
									    </div>
								<div id=

 

PHRASE

Level 60  머나먼나라

군자는 표범의 무뉘가 아름답고 훌륭한 것처럼 날마다 선으로 변해 간다. 소인은 마음 에도 없이 얼굴만 윗사람의 뜻에 따르는 태도를 취한다. -역경

댓글 ( 4)

댓글 남기기

작성

PHP 목록    more