콜백함수에 값을 보내 문자열을 반환하는 array_reduce() 함수

 

mixed array_reduce ( array $input , callback $function [, int $initial ] ) (PHP 4, PHP 5)


콜백 함수에 배열의 값을 넣고, 그 결과의 문자열을 반환받습니다.

ex #1)

<?php
function myfunction($k, $v)
{
  return
$k . "=>" . $v;
}
$a = array("a"=>"Dog", "b"=>"Cat", "c"=>"Horse");
print_r(array_reduce($a, "myfunction"));
// 출력: =>Dog=>Cat=>Horse
?>

 

인수 Initial를 설정하면 그 값을 처음 부분에 사용되고, 배열이 비어 있으면 최종 값으로 설정됩니다. 다음은 문자열을 설정했을 때와 정수를 설정했을 때의 결과입니다.


ex #2)

<?php
function myfunction($k, $v)
{
  return
$k . "=>" . $v;
}
$a = array("a"=>"Dog", "b"=>"Cat", "c"=>"Horse");


print_r(array_reduce($a, "myfunction", "string"));
// 출력: 0=>Dog=>Cat=>Horse

 

 

print_r(array_reduce($a, "myfunction", 10));
// 출력: 10=>Dog=>Cat=>Horse
?>


ex #3)

<?php
function rsum($v, $w)
{
$v += $w;
return
$v;
}

function
rmul($v, $w)
{
$v *= $w;
return
$v;
}

$a = array(1, 2, 3, 4, 5);
$b = array_reduce($a, "rsum"); // 출력: 15

// 10*1*2*3*4*5 = 1200
$c = array_reduce($a, "rmul", 10); // 출력: 1200

$x = array();
$d = array_reduce($x, "rsum", 1); // 출력: 1
?>

 

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

array array_change_key_case ( array $input [, int $case ] ) (PHP 4 >= 4.2.0, PHP 5)

 

input에서 모든 키를 소문자나 대문자로 바꾼 배열을 반환합니다. 숫자 인덱스는 그대로 남습니다. 인수 case CASE_UPPERCASE_LOWER(기본값)의 상수를 사용할 수 있고, input가 배열이 아니면 php 오류 코드를 표시합니다.

ex #1)

<?php
$input_array
= array("FirSt" => 1, "SecOnd" => 4);

// 문자열을 대문자로 변경합니다.
print_r(array_change_key_case($input_array, CASE_UPPER));

/*

출력

Array

{

 [FIRST] => 1

 [SECOND] => 4

}

*/
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

다차원 배열 정렬 array_multisort() 함수

 

bool array_multisort ( array $arr [, mixed $arg [, mixed $... ]] ) (PHP 4, PHP 5)

 

이 함수는 여러 배열을 한번에 정렬하거나, 1개 이상의 차원을 가진 배열을 정렬할 수 있습니다. 연관(string)키는 유지되지만, 숫자 키는 재인덱스 됩니다.

 

ex #1)

<?php
$ar1
= array(10, 100, 100, 0
);
$ar2 = array(1, 3, 2, 4
);
$ar3 = array("j"=>1, "b"=>3, 2, "a"=>4
);
array_multisort($ar1, $ar2, $ar3
);

print_r($ar1
);
/*
출력:
Array (
[0] => 0 [1] => 10 [2] => 100 [3] => 100
)
*/


print_r($ar2);
/*
출력:
Array (
[0] => 4 [1] => 1 [2] => 2 [3] => 3
)
*/


print_r($ar3);
/*
출력:
Array (
[a] => 4 [j] => 1 [0] => 2 [b] => 3
)
*/
?>

 

이 함수에서 다음의 상수를 이용하면 다양한 선택적 정렬 순서를 지정할 수 있습니다.

 

array_multisort( array1, sorting order, sorting type, array2, array3... )

 

sorting order

파라미터

의 미

SORT_ASC

SORT_DESC

a-z, 1-9 순 오름차순으로 정렬

z-a, 9-1 순 내림차순으로 정렬

 

sorting type

파라미터

의 미

SORT_REGULAR

SORT_NUMERIC

SORT_STRING

SORT_LOCALE_STRING

SORT_NATURAL

SORT_FLAG_CASE

일반적인 정렬.(sort와 동일한 기능을 함)

숫자 정렬.

문자열 정렬.

현재 로케일에 기반 문자열로 원소를 정렬.(sort와 동일한 기능을 함)

natsort 와 같은 자연순 정렬

대소문자를 구분하지 않고 문자열을 정렬(OR 연산자 사용가능)

 

다음은 sorting order $a1 배열을 오름차순으로 하고, $a2 배열을 내림차순으로 정렬해 봅니다.

 

ex #2)

<?php
$a1=array(
"Dog", "Dog", "Cat"
);
$a2=array(
"Pluto", "Fido", "Missy"
);
array_multisort($a1, SORT_ASC, $a2, SORT_DESC);
print_r($a1);
print_r($a2);

/*

출처:

Array (

[0] => Cat [1] => Dog [2] => Dog

)

 

Array (

[0] => Missy [1] => Pluto [2] => Fido

)

*/
?>

 

이제 sorting order sorting type 를 혼용해서 정렬해 보겠습니다.

 

ex #4)

<?php
$a1 = array(1,30,15,7,25);
$a2 = array(4,30,20,41,66);

 

// 두 배열을 하나로 합치고
$num = array_merge($a1, $a2);

 

// 숫자 배열을 내림차순으로 정렬합니다.
array_multisort($num, SORT_DESC, SORT_NUMERIC);
print_r($num);

/*

출력:

Array (

[0]=> 66 [1] => 41 [2] => 30 [3] => 30 [4] => 25 [5] => 20 [6] => 15 [7] => 7 [8] => 4 [9] => 1

)

*/
?>

 

ex #5)

<?php
$ar
= array(
 array(
"10", 11, 100, 100, "a"
),
 array(
1, 2, "2", 3, 1
)
);
// $ar[0]배열은 문자열을 오름차순으로 정렬하고,

// $ar[1]배열을 숫자를 내림차순으로 정렬합니다.

array_multisort($ar[0], SORT_ASC, SORT_STRING,
                $ar[1], SORT_NUMERIC, SORT_DESC
);
print_r($ar
);
/*
출력:
Array (
[0] => Array (
  [0] => 10
  [1] => 100
  [2] => 100
  [3] => 11
  [4] => a
 )

[1] => Array (
  [0] => 1
  [1] => 3
  [2] => 2
  [3] => 2
  [4] => 1
 )
)
*/
?>

 

ex #6)

<?php
$data
[] = array('volume' => 67, 'edition' => 2
);
$data[] = array('volume' => 86, 'edition' => 1
);
$data[] = array('volume' => 85, 'edition' => 6
);
$data[] = array('volume' => 98, 'edition' => 2
);
$data[] = array('volume' => 86, 'edition' => 6
);
$data[] = array('volume' => 67, 'edition' => 7
);

//
열 목록 얻기
foreach ($data as $key => $row) {
  $volume[$key] = $row['volume'
];
  $edition[$key] = $row['edition'
];
}

// volume
내림차순, edition 오름차순으로 데이터를 정렬
//
공통 키를 정렬하기 위하여 $data를 마지막 인수로 추가
array_multisort($volume, SORT_DESC,
                $edition, SORT_ASC, $data
);

print_r($volume
);
/*
출력:
Array (
[0] => 98
[1] => 86
[2] => 86
[3] => 85
[4] => 67
[5] => 67
)
*/

print_r($edition);
/*
출력:
Array (
[0] => 2
[1] => 1
[2] => 6
[3] => 6
[4] => 2
[5] => 7
)
*/
?>

 

관련글: 2013/09/09 [php] 배열 정렬 함수

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

일반 정렬 sort(), rsort() 함수

 

bool sort ( array &$array [, int $sort_flags ] ) (PHP 4, PHP 5)

 

이 함수는 일반적인 원소들을 작은 값에서 큰 값으로 정렬해 줍니다. array에 새로운 키를 할당하거나 이미 할당되어 있는 키를 제거할 수 있지만, 여러 자료형을 가지고 있는 배열이나 키 원소를 유지할 필요가 있는 곳에서는 사용하지 말아야 합니다.

 

이 함수는 다음의 인수를 사용할 수 있습니다.

 

SORT_REGULAR

통상적인 방법으로 원소를 비교합니다. (자료형을 바꾸지 않음)

SORT_NUMERIC

수치적으로 원소를 비교합니다.

SORT_STRING

문자열로 원소를 비교합니다.

SORT_LOCALE_STRING

현재 로케일에 기반하여 문자열로 원소를 비교합니다.

PHP 6 전에는, setlocale()로 변경할 수 있는 시스템 로케일을 사용하지만 PHP 6부터는, i18n_loc_set_default()함수 사용을 권고합니다.

 

다음은 원래의 키가 제거되고 새로운 키 원소를 할당 받으며 데이터 배열이 정렬됩니다.

 

ex #1)

$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
sort($fruits);
foreach ($fruits as $key => $val) {
  echo "$key = $val\n";
}

/*

출력:

0 = apple

1 = banana

2 = lemon

3 = orange

*/

?>

 

ex #2)

<?php
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);


foreach ($fruits as $key => $val) {
  echo "fruits[" . $key . "] = " . $val . "\n";
}
/*

출력:

fruits[0] = apple

fruits[1] = banana

fruits[2] = lemon

fruits[3] = orange

*/
?>

 

ex #3)

<?php
$array1
= array('apple', 'banana','pear');
$array2 = array('grape', 'pear','orange');

function
array_unique_merge_sort($array1, $array2){
  $array = array_unique(array_merge($array1, $array2));
  sort($array);
  foreach (
$array as $key => $value) {
    $new[$key] = $value;
  }
  return
$new;
}

print_r (array_unique_merge_sort($array1, $array2));
/*

출력:

Array

(

 [0] => apple

 [1] => banana

 [2] => grape

 [3] => orange

 [4] => pear

)

*/
?>

 

다음은 역순 정렬 rsort() 함수의 예입니다. rsort()함수는 큰 값에서 작은 값으로 정렬됩니다.

 

ex #4)

<?php
$fruits = array(4, 6, 2, 22, 11);
rsort($fruits);
foreach ($fruits as $val) {
  echo $val . ", ";
}
// 출력: 22, 11, 6, 4, 2
?>

 

ex #5)

<?php
$fruits = array("lemon", "orange", "banana", "apple");
rsort($fruits);


foreach ($fruits as $key => $val) {
  echo "fruits[" . $key . "] = " . $val . "\n";
}
/*

출력:

fruits[0] = orange

fruits[1] = lemon

fruits[2] = banana

fruits[3] = apple

*/
?>

 

값에 따라 오름차순, 내림차순으로 정렬하는 asort(), arsort() 함수

 

bool asort ( array &$array [, int $sort_flags ] ) (PHP 4, PHP 5)

 

이 함수는 배열의 데이터가 그 배열의 키 값을 유지할 수 있도록 배열을 오름차순으로 정렬합니다. 이 함수는 주로 실제 원소의 정렬이 중요한 연관 배열을 정렬할 경우 사용됩니다. sort_flags 인수는 sort()함수의 상수를 사용할 수 있습니다.

 

ex #6)

<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
foreach ($fruits as $key => $val) {
  echo "$key = $val\n";
}

/*

출력:

c = apple

b = banana

d = lemon

a = orange

*/
?>

 

ex #7)

<?php
$age=array(
"Peter"=>"35", "Ben"=>"37", "Joe"=>"43"
);
asort($age);

foreach
($age as $x=>$x_value) {
 
echo
"Key=" . $x . ", Value=" . $x_value;
 
echo
"<br>";
}

/*

출력:

Key=Peter, Value=35
Key=Ben, Value=37
Key=Joe, Value=43

*/
?>

 

ex #8)

<?php
$kvpairs
= array('noun' => 'thought', 'animal' => 'fish', 'abstract' => 'thought', 'food' => 'fish', 'verb' => 'fish');
print_r($kvpairs);
/*

출력:

Array
(
[noun] => thought
[animal] => fish
[abstract] => thought
[food] => fish
[verb] => fish
)

*/


array_multisort(array_values($kvpairs), array_keys($kvpairs), $kvpairs);
print_r($kvpairs);

/*

출력:

Array
(
[animal] => fish
[food] => fish
[verb] => fish
[abstract] => thought
[noun] => thought
)

*/
?>

 

알파벳 내림차순으로 정렬하면서 각 원소와 연관된 데이터가 유지되도록 해주는 함수가 arsort() 함수입니다. asort() 함수의 반대 기능입니다.

 

ex #9)

<?php
$fruits
= array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
arsort($fruits);
foreach (
$fruits as $key => $val) {
  echo
"$key = $val\n";
}
/*

출력:

a = orange
d = lemon
b = banana

c = apple

*/
?>

 

키에 따라 오름차순으로 정렬 배열 ksort(), krsort() 함수

 

bool ksort ( array &$array [, int $sort_flags ] ) (PHP 4, PHP 5)

 

asort() 함수는 키를 유지하면서 데이터 정렬을 해주는 함수입니다. ksort() 함수는 반대로 키에 의해 배열을 정렬하고, 키와 데이터의 연관성을 유지해 줍니다. sort_flags 인수는 sort()함수의 상수를 사용할 수 있습니다.

 

ex #10)

<?php
$fruits
= array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
foreach (
$fruits as $key => $val) {
  echo
"$key = $val\n";
}

/*

출력:

a = orange

b = banana

c = apple

d = lemon

*/
?>

 

ex #11)

<?php
$age=array(
"Peter"=>"35", "Ben"=>"37", "Joe"=>"43"
);
ksort($age);

foreach($age as $x=>$x_value) {
  echo
"Key=" . $x . ", Value="
. $x_value;
}

/*

출력:

Key=Ben, Value=37
Key=Joe, Value=43
Key=Peter, Value=35

*/
?>

 

krsort() 함수는 ksort() 함수의 역순 정렬입니다.

 

ex #12)

<?php
$fruits
= array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
krsort($fruits);
foreach (
$fruits as $key => $val) {
echo
"$key = $val\n";
}

/*

출력:

d = lemon
c = apple
b = banana

a = orange

*/
?>

 

관련글: 2011/06/03 [php] 알파벳, 숫자, 문자열을 정렬하는 natcasesort 함수

 

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

int count ( mixed $var [, int $mode ] ) (PHP 4, PHP 5)

배열원소나 객체의 수를 세는 함수로 재귀적 카운터가 가능합니다. sizeof 함수와 동일한 동작을 하며, mode 에 1(또는 상수 COUNT_RECURSIVE)로 설정하면 재귀적, 다차원 배열의 수를 셉니다. 다시 말해 mode를 설정하지 읺았다면, 1차원 배열만 카운터하게 됩니다.

예제 (ex #1
 <?php
 
// null 은 0의 값을 가집니다.
 
echo count(null
);
 echo 
"<br />\n"
// 결과: 0

 
echo count(false
);
 echo 
"<br />\n"
// 결과: 1 

 // 빈 배열이면 0을 반환합니다.
 echo count(array());
 echo 
"<br />\n"
// 결과: 0

 // $bar 변수를 설정하지 않았다면, 0 을 반환합니다.
 echo count($bar);
 echo 
"<br />\n"
// 결과: 0

 
echo count(0
);
 echo 
"<br />\n"
// 결과: 1

 
echo count(-1
);
 echo 
"<br />\n"
// 결과: 1

 
echo count(1
);
 echo 
"<br />\n"
// 결과: 1 

 
echo count(""
);
 echo 
"<br />\n"
// 결과: 1 

 
echo count(" "); 
// 결과: 1 
 ?>

사실 음수나 false가 카운터 수에 포함되지 않아야 한다면, 다음과 같이 함수를 작성해서 사용할 수 있습니다.

예제 (#2
 <?php 
 
function icount($cnt$mode=0
){
      if(
$mode === 1
){
           
$mode COUNT_RECURSIVE
;
      }
      if(!empty(
$cnt) && ($cnt !== -1
)){
           return 
count($cnt$mode
);
      }
      return 
0
;
 }

 echo 
icount(-1);
 
 echo "<br />\n"// 결과: 0

 
echo icount(false);

 echo "<br />\n"// 결과: 0 

 echo icount(0);
 echo 
"<br />\n"// 결과: 0

 echo icount(""); // 결과: 0

 
?>

예제 (ex #3
 <?php
 $a
[0] = 1
;
 $a[1] = 3
;
 $a[2] = 5
;
 $result count($a
);
 // 결과: 3

 $b[0] = 7
;
 $b[5] = 9
;
 $b[10] = 11
;
 $result count ($b
);
 // 결과: 3
 ?>

다음은 재귀적으로 다차원 배열 수를 셉니다.

예제 (ex #4
 <?php
 $food 
= array( 'fruits'  => array('orange''banana''apple'
),
               
'veggie'  => array('carrot''collard','pea'
));

 // 재귀 count 수
 echo count($food,COUNT_RECURSIVE
);
 // 결과: 8


 // 보통 count 수
 echo count($food);
 // 결과: 2
 ?>

다음은 참고할 다차원 예제입니다.

예제 (ex #5
 <?php
 $data 
= array( 
    
"apples" => 
        array(
"red""yellow""pineapples""green"), 
    
"bananas" => 
        array(
"small""medium""big""large"), 
    
"vegs" => 
        array(
"potatoes""carrots""onions""join"
 );
 
$rows count($data,0);
 
$cols = (count($data,1)/count($data,0))-1;


 echo 
"\$rows => $rows, \$cols => $cols";
 
// 결과: $rows => 3, $cols => 4

 
?> 

다음은 재귀함수를 사용하여 배열의 실질적 수를 카운터합니다.

예제 (ex #6
 <?php 
 
function countValuesRecursive($array$count 0
) {    
      foreach (
$array as $value
) {
           if (
is_array($value
)) {            
                
$count countValuesRecursive($value$count
); 
            } else {
                 if (
$value
) {
                      
$count
++; 
                 } 
            } 
      } 
      return 
$count

 } 
// end func

 
$data 
= array( 
    
"apples" 
=> 
        array(
"red""yellow""pineapples""green"
), 
    
"bananas" 
=> 
        array(
"small""medium""big""large"
), 
    
"vegs" 
=> 
        array(
"potatoes""carrots""onions""join"

 );
 
 echo 
countValuesRecursive($data
);
 
// 결과: 12

 
?>
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

배열 함수에 대해 자주 다루는 것은 php에서 그만큼 비중이 크기 때문입니다. 어떤 배열 원소의 맨 앞을 제거하거나 추가, 또능 배열 원소의 끝에 하나 이상을 추가하거나 제거하는 함수에 대해 살펴 보겠습니다.

예제 (ex #1

 <?php 
 $stack 
= array("orange""banana""apple""raspberry"
); 


 
// 맨 앞의 배열 원소 그 값을 반환하고, 
 // $stack를 한 원소만큼 줄이는 함수는 array_shift 입니다.
 
$fruit array_shift($stack
); 
 echo 
$fruit "<br />\n"

 
print_r($stack
); 
 
/* 
 결과: 
 orange 
 Array 
 ( 
    [0] => banana 
    [1] => apple 
    [2] => raspberry 
 ) 
 */ 




 

 // 다시 맨 앞에 붙이는 함수가 array_unshift 입니다.
 // $frult 갯수에 제한이 없습니다.
 // $fruit 원소를 다시 맨 앞에 붙입니다. 
 
array_unshift($stack$fruit
); 
 
print_r($stack
); 
 
/* 
 결과: 
 Array 
 ( 
    [0] => orange 
    [1] => banana 
    [2] => apple 
    [3] => raspberry 
 ) 
 */ 




 


 // 끝의 배열 원소 그 값을 반환하고, 
 // $stack를 한 원소만큼 줄입니다. 
 
$fruit array_pop($stack
); 
 echo 
$fruit "<br />\n"

 
print_r($stack
); 
 
/* 
 결과: 
 raspberry 
 Array 
 ( 
    [0] => orange 
    [1] => banana 
    [2] => apple 
 ) 
 */ 




 

 // array_push 함수는 배열의 끝에 붙이는 함수입니다.
 // $frult 는 갯수에 제한이 없습니다.
 // $fruit 원소를 다시 끝에 붙입니다. 
 
array_push($stack$fruit
); 
 
print_r($stack
); 
 
/* 
 결과: 
 Array 
 ( 
    [0] => orange 
    [1] => banana 
    [2] => apple 
    [3] => raspberry 
 ) 
 */ 
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

배열인 변수를 합산이나 곱셈을 해주는 연산 함수가 있습니다.

다음 곱셈 함수 array_product() 사용예제입니다.

예제(ex #1

 <?php 
 $a 
= array(2"4"68
);
 echo 
"product(a) = " array_product($a) . "\n"

 
// 결과: product(a) = 384 


 
$a = array("2one""4"6, (int)"8red"
); 
 echo 
"product(a) = " array_product($a) . "\n"

 
// 결과: product(a) = 384 


 
$a = array("2one""4"6, (int)"red8"
); 
 echo 
"product(a) = " array_product($a) . "\n"

 
// 결과: product(a) = 0


 
echo "product(a) = " array_product(range(1,30)) . "\n"

 
// 결과: product(a) = 2.6525285981219E+32  
 
?>  


다음은 덧셈 연산입니다.

예제 (ex #2

 <?php  
 $a 
= array(2"4"68
); 
 echo 
"sum(a) = " array_sum($a) . "\n"
;  
 
// 결과: sum(a) = 20 


 
$a = array("2one""4"6, (int)"8red"
);  
 echo 
"sum(a) = " array_sum($a) . "\n"
;  
 
// 결과: sum(a) = 20  


 
$a = array("2one""4"6, (int)"red8"
);  
 echo 
"sum(a) = " array_sum($a) . "\n"
;  
 
// 결과: sum(a) = 12 


 
echo "sum(a) = " array_sum(range(1,30)) . "\n"
;  
 
// 결과: sum(a) = 465 
  

 
$b = array("a" => 1.2"b" => 2.3,"c" => 3.4
); 
 echo 
"sum(b) = " array_sum($b) . "\n"

 
// 결과: 6.9 
 
?>  


이 두 함수는 산술 연산자의 영향을 받지만, 차원이 다른 배열인 경우 무시 됩니다.

예제 (ex #3

 <?php  
 $a 
= array("2one""4", array(6,2,1), (int)"8red"
);  
 echo 
"array_product(a) = " array_product($a) . "\n"
;  
 
// 결과: sum(a) = 64 


 
$a = array("2one""4", array(6,2,1), (int)"red8"
);  
 echo 
"sum(a) = " array_sum($a) . "\n"
;  
 
// 결과: sum(a) = 6
 
?>


차원이 서로 다른 배열인 경우 함수를 따로 만들어 사용해야 합니다.

 <?php  
 
function multiDimArrayAdd($arr
){ 
    static 
$sum



    if(
is_array($arr
)){ 
        foreach(
$arr as $k=>$v
){ 
            if(
is_array($arr[$k
])){ 
                
multiDimArrayAdd($arr[$k
]); 
            } else { 
                
$sum += (int)$v

            } 
        } 
    } 
    return 
$sum

 }
 
$a = array("2one""4", array(6,2,1), (int)"red8"
); 
 echo 
"sum(a) = " multiDimArrayAdd($a) . "\n"
;  
 
// 결과: sum(a) = 15 
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

bool shuffle ( array &$array ) (PHP 4, PHP 5)

이 함수는 배열을 (배열 안의 원소를 임의의 순서로) 섞습니다.

예제 (ex #1

 <?php 
 $numbers 
range(120
); 
 
srand((float)microtime() * 1000000
); 
 
shuffle($numbers
); 
 foreach (
$numbers as $number
) { 
    echo 
"$number "

 } 
 
// 결과: 15 1 9 18 5 6 3 16 14 20 4 19 2 17 11 10 7 8 12 13 
 
?> 

관련글: 2011/06/13 - [phP 함수 레퍼런스/함수 활용] - 난수 생성기 #2

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

int extract ( array $var_array [, int $extract_type [, string $prefix ]] ) (PHP 4, PHP 5)

extract_typeprefix 인자에 따라 각 키/값 쌍에 대해서 현재 심볼 테이블안에 변수를 생성합니다. 이 말은 연관배열에 아무런 영향을 주지 않고, 새로운 변수를 생성한다는 점입니다.

예제(ex #1

 <?php
 $arr 
= array('a'=>'one','b'=>'two','c'=>'three'
);
 
extract($arr
);
 echo 
"$a, $b, $c"
// 결과: one, two, three


 // 이 함수는 새로운 변수를 생성하며,
 // 기존 배열에 아무런 영향을 주지 않습니다.
 
print_r($arr
);
 
/*
 결과:
 Array
 (
    [a] => one
    [b] => two
    [c] => three
 )
 */
 
?> 


위 예제와 같이 $_GET 이나 $_POST 등 신뢰성이 떨어지는 데이터에 extract 함수를 사용하는 것에 주의해야 할 필요가 있음을 메뉴얼에서 권고합니다. GET, POST 등의 다른 변수를 전역으로 가져오고 싶다면
import_request_variables 함수를 사용하길 권장합니다.

유효하지 않은 변수명이나 변수 변형이 필요한 경우 extract_type 에 다음 표의 상수로 정의할 수 있습니다.

 EXTR_OVERWRITE 
                생성할 변수가 중복이면, 기존 변수를 덮어 씁니다.

 EXTR_SKIP
 
                생성할 변수가 중복이면, 기존 변수를 덮어 쓰지 않습니다.

 
EXTR_PREFIX_SAME 
               
생성할 변수가 중복이면, prefix 를 변수명 앞에 추가합니다. 

 EXTR_PREFIX_ALL
               
prefix 를 모든 변수명 앞에 추가합니다.

 
EXTR_PREFIX_INVALID 
                유효하지 않은 변수명일 경우 해당 변수명 앞에만 prefix 를 추가합니다.

 
EXTR_IF_EXISTS 
                현재 심볼 테이블에 이미 존재하는 변수만 덮어 씁니다.

 
EXTR_PREFIX_IF_EXISTS 
                현재 심볼 테이블에 앞 첨가된 버전의 같은 변수가 존재할때만 앞 첨가된 변수명을 생성합니다.

 
EXTR_REFS 
                변수를 참조로써 추출합니다. 입력된 변수 값이 var_array 인자의 값을 참조하게 됩니다.
                이 플래그는 다른 플래그와 OR 연산자 |로 extract_type 에서 사용할 수 있습니다.


extract_type 인자가 설정되지 않으면, 기본적으로 EXTR_OVERWRITE가 설정되어 있다고 가정합니다.
 
예제(ex #2

 <?php
 
if(isset($_FILES["file"
])){
    
extract($_FILES
);
    
extract($file
);
    echo 
$name."<br/>\n"
;
    echo 
$tmp_name."<br/>\n"
;
    echo 
$size."<br/>\n"
;
 }





 


 
$size "large"

 
$var_array = array("color" => "blue"

                   
"size"  => "medium"

                   
"shape" => "sphere"
); 


 
// $size 변수가 중복이 되므로 변수를 갖는 
 // size 앞에 $wddx를 추가합니다. 
 // EXTR_PREFIX_SAME 대신에 EXTR_OVERWRITE 를 
 // 설정했다면, $size는 medium을 갖게 됩니다. 
 
extract($var_arrayEXTR_PREFIX_SAME"wddx"
); 


 echo 
"$color, $size, $shape, $wddx_size\n"

 
// 결과: blue, large, sphere, medium





 


 // 생성되는 변수에 모두 $var_를 붙입니다.
 
$z = array('foo''bar'
);
 
extract($zEXTR_PREFIX_ALL'var'
);


 echo 
"$var_0, $var_1"
// 결과: foo, bar
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

array range ( mixed $low , mixed $high [, number $step ] ) (PHP 4, PHP 5)

이 함수는 원소의 범위를 가지는 배열을 만들 수 있습니다. low는 최소값으로 영문자, 음수, 양수가 될 수 있으며, high는 증가값을 가집니다.

step 인자가 주어지면, 연속적인 원소들의 증가값으로 사용될 것이며, 양수로 주어져야 합니다. 이 값이 주어지지 않으면, step 의 기본값은 1의 값을 가집니다.

예제(ex #1

 <?php
 
foreach (range(012) as $number
) {
   echo 
$number
;
 }
 
// 결과: array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);


 
foreach (range(-512) as $number
) {
    echo 
$number
;
 }
 
// 결과: array(-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);


 // 5.0.0 부터 step 인자를 사용할 수 있습니다
 
foreach (range(010010) as $number
) {
    echo 
$number
;
 }
 
// 결과: array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100);


 
foreach (range('a''i') as $letter
) {
    echo 
$letter
;
 }
 
// 결과: array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i');


 
foreach (range('c''a') as $letter
) {
    echo 
$letter
;
 }
 
// 결과: array('c', 'b', 'a');
 
?> 


이 함수로 달력에 적용해 보겠습니다.

예제(ex #2

 <?php
 $year 
2011
;
 
$month 6
;
 list(
$tday$dday) = split('[ ]'date('t w',mktime(0,0,1,$month,1,$year
)));



 
$day 1-$dday
;
 
$values range($day$tday
);
 
$rows array_chunk($values7
);



 echo 
"<table>\n"
;
 foreach (
$rows as $row
) {
      echo 
"<tr>\n"
;
      foreach (
$row as $value
) {
          echo 
"<td>\n"
;
          if(
$value >= 1
){
              echo 
$value
;
          }
      }
 }
 echo 
"</table>\n"
;



 
/*결과: 
              1   2   3   4  
  5   6   7   8   9  10  11  
 12  13  14  15  16  17  18  
 19  20  21  22  23  24  25  
 26  27  28  29  30  
 */
 
?>  

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

bool natcasesort ( array &$array ) (PHP 4, PHP 5)

이 함수는 키/값 연결을 유지하면서 알파벳, 숫자, 문자열을 정렬하는 알고리즘을 구현합니다. 이 알고리즘을 "자연순"이라고 말합니다. 이 함수는 성공할 경우 true를, 실패하면 false를 반환합니다.

예제 (ex #1

 <?php
 $array1 
$array2 $array3 
= array(
  
'IMG0.png''img12.png''img10.png''img2.png'
  
'img1.png'
'IMG3.png' 
 
);

 
sort($array1
);
 echo 
"일반 정렬\n"
;
 
print_r($array1
);
 
/*
 결과:
 일반 정렬
 Array
 (
    [0] => IMG0.png
    [1] => IMG3.png
    [2] => img1.png
    [3] => img10.png
    [4] => img12.png
    [5] => img2.png
 )
 */


 // 이 함수는 대소문자 구분없이 정렬합니다.
 // 대소문자 구분이 필요하면, natsort를 사용해야 합니다.
 
natcasesort($array2
);
 echo 
"\n자연순 정렬 (대소문자 구분 없음)\n"
;
 
print_r($array2
);
 
/*
 결과:
 자연순 정렬 (대소문자 구분 없음)
 Array
 (
    [0] => IMG0.png
    [4] => img1.png
    [3] => img2.png
    [5] => IMG3.png
    [2] => img10.png
    [1] => img12.png
 )
 */


 
natsort($array3
);
 echo 
"\n자연순 정렬\n"
;
 
print_r($array3
);
 
/*
 결과:
 자연순 정렬
 Array
 (
    [0] => IMG0.png
    [5] => IMG3.png
    [4] => img1.png
    [3] => img2.png
    [2] => img10.png
    [1] => img12.png
 )
 */
 
?> 


이 함수는 배열 값을 알파벳순으로 정열해 주지만, 아쉽게도 배열 키는 정렬되지 않습니다. 정렬이 필요하다면 다음과 같이 array_values함수를 사용하여도 괜찮습니다.

예제 (ex #2

 <?php
 $array1 
$array2 = array(
 
'IMG0.png''img12.png''img10.png''img2.png',
  
'img1.png''IMG3.png'
);

 
natcasesort($array1
);
 echo 
"\n자연순 정렬 (대소문자 구분 없음)\n"
;
 
print_r(array_values($array1
));
 
/*
 결과:
 자연순 정렬 (대소문자 구분 없음)
 Array
 (
    [0] => IMG0.png
    [1] => img1.png
    [2] => img2.png
    [3] => IMG3.png
    [4] => img10.png
    [5] => img12.png
 )
 */


 
natsort($array2
);
 echo 
"\n자연순 정렬\n"
;
 
print_r(array_values($array2
));
 
/*
 결과:
 자연순 정렬
 Array
 (
    [0] => IMG0.png
    [1] => IMG3.png
    [2] => img1.png
    [3] => img2.png
    [4] => img10.png
    [5] => img12.png
 )
 */
 
?> 


[자연순] 정렬 우선 순위는 다음과 같습니다.

예제 (ex #3
 1-2 < 1-02 < 1-20 < 10-20 < fred < jane < pic01 < pic2 < pic02 < pic02a < pic3 < pic4 < pic 4 else
 < pic 5 < pic05 < pic 5 < pic 5 something < pic 6 < pic   7 < pic100 < pic100a < pic120 < pic121
 < pic02000 < tom < x2-g8 < x2-y7 < x2-y08 < x8-y8

.외 추가 참고 자료는 아래 링크를 참고하세요.
http://sourcefrog.net/projects/natsort/
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

배열원소 포인터를 이전, 다음, 마지막 원소로 이동시키거나 처음 위치 원소로 이동시킬 수 있습니다. 배열 원소의 이동 함수는 사용할 일은 거의 없지만, 배열이 어떻게 작동되는지 정도만 알아 두면 좋을 듯 합니다.

예제 (ex #1

 <?php
 $arr 
= array("첫번째""두번째""세번째""네번째""다섯번째"
);

 
// 현재 위치하는 배열원소를 반환합니다.
 
$mode current($arr); 
// 결과: 첫번째

 // 내부 배열 포인터를 한칸 앞으로 이동합니다.
 
$mode next($arr); 
// 결과: 두번째
 
$mode next($arr); 
// 결과: 세번째

 // 현재 위치하는 배열원소를 반환합니다.
 
$mode current($arr); 
// 결과: 세번째

 // 현재 위치에서 내부 배열포인터를 한칸 뒤로 이동합니다.
 
$mode prev($arr); 
// 결과: 두번째

 // 내부 배열 포인터를 한칸 전진합니다.
 
$mode next($arr); 
// 결과: 세번째

 // 마지막 배열 원소로 이동시킵니다.
 
$mode end($arr); 
// 결과: 다섯번째

 // 마지막 배열 원소에서 처음 위치로 이동시킵니다.
 
$mode reset($arr); 
// 결과: 첫번째
 
?>


예제 (ex #2

 <?php
 $array 
= array('step one''step two''step three''step four'
);
 echo 
current($array) . "<br />\n"
// 결과: step one

 
next($array
);
 
next($array
);
 echo 
current($array) . "<br />\n"
// 결과: step three

 // current, next, prev, end, reset은 배열원소를
 // 훼손하지 않고, 보존 및 참조합니다. 
 
print_r($array
);
 
/*
 결과:
 Array
 (
    [0] => step one
    [1] => step two
    [2] => step three
    [3] => step four
 )
 */

 
reset($array
);
 echo 
current($array) . "<br />\n"
// 결과: step one
 
?> 

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

array array_chunk ( array $input , int $size [, bool $preserve_keys ] ) (PHP 4 >= 4.2.0, PHP 5)

배열을 size 크기 만큼 조각으로 나누어 주며, preserve_keys 인자를 true로 설정시 나누어진 조각인 키의 연속성을 가지게 합니다.

예제 (ex #1

  <?php
 
// 배열을 2조각으로 나눕니다.
 
$input_array = array('a''b''c''d''e'
);
 
print_r(array_chunk($input_array2
));
 
/*
 결과:
 Array
 (
    [0] => Array
        (
            [0] => a
            [1] => b
        )
    [1] => Array
        (
            [0] => c
            [1] => d
        )
    [2] => Array
        (
            [0] => e
        )
 )
 */


 // 배열을 2조각으로 나누되, 키가 연속되게 합니다.
 
$input_array = array('a''b''c''d''e'
);
 
print_r(array_chunk($input_array2true
));
 
/*
 결과:
 Array
 (
    [0] => Array
        (
            [0] => a
            [1] => b
        )
    [1] => Array
        (
            [2] => c
            [3] => d
        )
    [2] => Array
        (
            [4] => e
        )
 )
 */
 
?>


예제 (ex #2

  <?php
 
function array_chunk_vertical($data$columns
) {
      
$n count($data
) ;
      
$per_column floor($n $columns
) ;
      
$rest $n $columns 
;

      
$per_columns 
= array( ) ;
      for ( 
$i $i $columns $i
++ ) {
            
$per_columns[$i] = $per_column + ($i $rest 0
) ;
       }
       
$tabular 
= array( ) ;
       foreach ( 
$per_columns as $rows 
) {
            for ( 
$i $i $rows $i
++ ) {
                 
$tabular[$i][ ] = array_shift($data
) ;
            }
       }
       return 
$tabular 
;
 }
 
$data array_chunk_vertical(range(131), 7
) ;
 foreach ( 
$data as $row 
) {
      foreach ( 
$row as $value 
) {
           
printf('[%2s]'$value
) ;
      }
      echo 
"\r\n" 
;
 }
 
/*
 결과:
 [ 1][ 6][11][16][20][24][28]
 [ 2][ 7][12][17][21][25][29]
 [ 3][ 8][13][18][22][26][30]
 [ 4][ 9][14][19][23][27][31]
 [ 5][10][15]
 */
 
?> 


예제 (ex #3

 <?php
 $values 
range(131
);
 
$rows array_chunk($values7
);

 echo 
"<table>\n"
;
 foreach (
$rows as $row
) {
      echo 
"<tr>\n"
;
      foreach (
$row as $value
) {
           echo 
"<td>" $value "</td>\n"
;
      }
      echo 
"</tr>\n"
;
 }
 echo 
"</table>\n"
;

 
/*
 결과:
  1  2  3  4  5  6  7 
  8  9 10 11 12 13 14 
 15 16 17 18 19 20 21 
 22 23 24 25 26 27 28 
 29 30 31 
 */
 
?> 

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

array explode ( string $delimiter , string $string [, int $limit ] ) (PHP 4, PHP 5)

explode함수는 자주 사용되는 함수로 알아 둘 필요가 있습니다. delimiter 문자열을 경계로 나누어진 string문자열을 배열로 반환합니다.

여기서 limit를 지정하면, limit 수 만큼 배열을 나누어 나머지 원소는 string으로 반환합니다. limit 인수가 음수이면, 마지막 배열를 제외한 문자열를 반환합니다.

예제 (ex# 1

 <?php
 
// 공백을 기준으로 문자열을 나눕니다.
 
$pizza  "piece1 piece2 piece3 piece4 piece5 piece6"
;
 
$pieces explode (" "$pizza
);

 
print_r($pieces
);
 
/*
 결과:
 Array
 (
    [0] => piece1
    [1] => piece2
    [2] => piece3
    [3] => piece4
    [4] => piece5
    [5] => piece6
 )
 */


 // :를 기준으로 문자열을 나눕니다.
 
$data "foo:*:1023:1000::/home/foo:/bin/sh"
;
 
$str explode(":"$data
);
 
print_r($str
);
 
/*
 결과:
 Array
 (
    [0] => foo
    [1] => *
    [2] => 1023
    [3] => 1000
    [4] => 
    [5] => /home/foo
    [6] => /bin/sh
 )
 */
 
?>


다음은 limit인자로 문자열을 나누는 예제입니다.

예제 (ex# 2

 <?php
 
// 양수 limit 수 만큼 문자열을 나눕니다.
 
$str 'one|two|three|four'
;
 
print_r(explode('|'$str2
));
 
/*
 결과:
 Array
 (
    [0] => one
    [1] => two|three|four
 )
 */

 // 음수 limit (PHP 5.1부터) 마지막 문자열을 제외한 배열로 반환합니다.
 
$str 'one|two|three|four'
;
 
print_r(explode('|'$str, -1
));
 
/*
 결과:
 Array
 (
    [0] => one
    [1] => two
    [2] => three
 )
 */


 
$str '/one/two/three/four/'
;
 
print_r(explode('/'$str, -1
));
 
/*
 결과:
 Array
 (
    [0] =>
    [1] => one
    [2] => two
    [3] => three
    [4] => four
 ) 
 */
 
?> 

배열 원소를 문자열로 결합하는 implode 함수

string implode ( string $glue , array $pieces ) (PHP 4, PHP 5)

배열 원소를 glue 문자열로 결합시켜 주며, 빈 문자열 glue를 허용합니다.

예제 (ex# 3

 <?php
 
// ,로 문자열을 결합시킵니다.
 
$array = array('lastname''email''phone'
);
 
$comma_separated implode(","$array
);

 echo 
$comma_separated
// 결과: lastname,email,phone


 // |로 문자열 결합입니다.
 
$path = array('one','two','three','four'
);
 
$comma_separated implode("|"$array
);

 echo 
$comma_separated
// 결과:  one|two|three|four


 // glue 인자를 생략한 문자열 결합입니다.
 // 이는 구분 인자없이 문자열을 결합시킵니다.
 
$array = array('lastname''email''phone'
);
 
$comma_separated implode($array
);

 echo 
$comma_separated
// 결과: lastnameemailphone


 // glue 인자를 비워도 같은 효과를 가질 수 있습니다. 
 
$array = array('lastname''email''phone'
);
 
$comma_separated implode(""$array
);

 echo 
$comma_separated
// 결과: lastnameemailphone
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

bool in_array ( mixed $needle , array $haystack [, bool $strict ] ) (PHP 4, PHP 5)

이 함수는 needle인자를 주어진 haystack 배열에 있는지 찾습니다. 찾으면 true를, 아니면 false를 반환합니다. needle이 문자열이면, 대소문자를 구분하여 비교하고, 세 번째 인자 strict에 true로 설정하면 자료형도 확인합니다.

예제 (ex #1
 <?php
 $os 
= array("Mac""NT""Irix""Linux"
);

 if (
in_array("NT"$os
)) {
      echo 
"NT가 존재합니다."
;
 }
 
// 결과: NT가 존재합니다.

 // 이 함수는 대소문자를 구분하므로 false입니다.
 
if (in_array("mac"$os
)) {
      echo 
"찾는 문자가 존재합니다."
;
 }
 
// 결과:
 
?>

다음은 strict에 true로 설정했을 때의 반응입니다.

예제 (ex #2

 <?php
 $a 
= array('1.10'12.41.13
);

 
// needle이 문자열형이므로 결과는 false입니다.
 
if (in_array('12.4'$atrue
)) {
      echo 
"'12.4'의 값이 있습니다.\n"
;
 }
 
// 결과:

 
if (in_array(1.13$atrue
)) {
      echo 
"1.13 의 값이 있습니다.\n"
;
 }
 
// 결과: 1.13 의 값이 있습니다.

 // needle이 배열이면 다음과 같은 결과를 가집니다.
 
$needle = array('fruit'=>'banana''vegetable'=>'carrot'
);
 
$haystack 
= array(
      array(
'vegetable'=>'carrot''fruit'=>'banana'
),
      array(
'fruit'=>'apple''vegetable'=>'celery'
)
 );

 
// 값이 존재하고 동일한 자료형이지만 1차배열이 아니므로 false입니다.
 
if(in_array($needle$haystacktrue
)){
      echo 
"값이 존재합니다."
;
 }
 
// 결과:

 
if(in_array($needle$haystack
)){
      echo 
"값이 존재합니다."
;
 }
 
// 결과: 값이 존재합니다.
 
?>


예제 (ex #3

 <?php
 $a 
= array(array('p''h'), array('p''r'), 'o'
);
 
 if (
in_array(array('p''h'), $a
)) {
      echo 
"'ph' was found\n"
;
 }
 
// 결과: 'ph' was found

 
if (in_array(array('f''i'), $a
)) {
      echo 
"'fi' was found\n"
;
 }
 
// 결과:

 
if (in_array('o'$a
)) {
      echo 
"'o' was found\n"
;
 }
 
// 결과: 'o' was found
 
?> 

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요

_GET, _POST, _FILES 의 외부 배열 변수를 일괄 처리하는 함수입니다.

 <?php
 
// 다음 _GET 변수를 일괄처리되게 합니다.
 
$_GET['var1'] = 1
;
 
$_GET['var2'] = ""
;
 
$_GET['var3'] = null
;
 
$_GET['var4'] = "테스트입니다."
;
 
$_GET['var5']['ARG1'] = "ARG1"
;
 
$_GET['var5']['ARG2'] = "ARG2"
;
 
$_GET['var5']['ARG3']['ARG4'] = "3차배열"
;
 
$_GET['var5']['ARG3']['ARG5']['VAR'] = "4차배열"
;
 
$_GET['var5']['ARG4'] = "NULL"
;
 
$_GET['var5']['ARG5']['ARG6'] = "TEAT"
;
 
$_GET['var6'] = 2
;

 function 
replace_data($arg
){
     
$get 
= array();
     if(
is_array($arg
)){
          while(list(
$k,$v) = each($arg
)){
               if(
is_array($arg[$k
])){
                    while(list(
$k2,$v2) = each($arg[$k
])){
                         
$get[$k][$k2] = $arg[$k][$k2
];
                         
replace_data($get[$k][$k2
]);
                    }
               } else {
                    
// 일괄처리할 작업코드를 작성합니다.
                    
$get[$k] = $v
;
               }
          }
     }
     unset(
$_GET); 
// _GET 변수를 지워버림.
     
return $get
;
 } 
// end func

 
$get replace_data($_GET
);

 
print_r($get
);
 
print_r($_GET); 
// 결과: _GET 외부 변수는 지워 버렸으니 출력하지 않습니다.

 /*
 결과:
 Array
 (
    [var1] => 1
    [var2] => 
    [var3] => 
    [var4] => 테스트입니다.
    [var5] => Array
        (
            [ARG1] => ARG1
            [ARG2] => ARG2
            [ARG3] => Array
                (
                    [ARG4] => 3차배열
                    [ARG5] => Array
                        (
                            [VAR] => 4차배열
                        )
                )
            [ARG4] => NULL
            [ARG5] => Array
                (
                    [ARG6] => TEAT
                )
        )
    [var6] => 2
 )
 */
 
?>

블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요