heowc / programming-study

개발 스킬, 언어, 설계에 대한 공유 저장소
https://heowc.dev/programming-study/repo/
53 stars 5 forks source link

[php] array 관련 함수 정리 #35

Closed heowc closed 6 years ago

heowc commented 6 years ago

php 에서는 array 관련하여 다양한 함수를 제공한다.

ex) array_push, array_pop ...

위와 같은 함수 이외에도 많은 함수들을 제공하므로 간단하게 정리해보자.

heowc commented 6 years ago

php의 array는 내가 아는 array 이상의 개념이다. 보틍 array는 배열을 뜻하는데 map과 형태가 될 수 도 있다.

$map = array(
    'name' => 'heowc',
    'age' => 26
);

$list = array(
    'naver',
    'kakao',
    'google'
);

list, map 등의 클래스를 구현 해놓고 쓰면 어떨까?? -> DS라고 해서 data structure가 구현되어 있다. (의존성 추가 작업 필요)

heowc commented 6 years ago

array_change_key_case : 키를 대/소문자로 변경해준다. (기본값:소문자)

※ array 안에 array까지는 변경이 안된다.

heowc commented 6 years ago

array_chunk : size만큼 array를 쪼개준다. (java진영의 Guava 라이브러리 - Lists.partition과 비슷)

heowc commented 6 years ago

array_column : array의 형태를 colum을 기준으로 새로운 array를 만들어준다.

※ array_map 도 있으니 같이 확인

$records = array(
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ),
    array(
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    )
);

$first_names = array_column($records, 'first_name');
heowc commented 6 years ago

array_map : 콜백 함수로 새로운 형태의 array 생성(lambda function / java 진영의 Stream.map과 비슷)

$func = function($value) {
    return $value * 2;
};

array_map($func, range(1, 5));
heowc commented 6 years ago

array_filter : 콜백 함수로 array의 값으로 필터링 처리하여 새로운 형태의 array 생성 (lambda function / java 진영의 Stream.filter와 비슷)

function odd($var)
{
    return ($var & 1);
}

function even($var) {
    return (!($var & 1));
}

$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);

echo "홀수:\n";
print_r(array_filter($array1, "odd"));
echo "짝수:\n";
print_r(array_filter($array2, "even"));
heowc commented 6 years ago

array_key_exists : key가 해당 arrray에 존재하는지 여부 판단 key_exists : 동일

map형태로 사용할 때 유용할 듯..?

heowc commented 6 years ago

array_keys : array에서 key로 구성된 별도의 array 생성 array_values : array에서 value로 구성된 별도의 array 생성

heowc commented 6 years ago

array_merge : array에 다른 array를 병합해서 array생성

java진영의 List.addAll와 비슷한 형태로 사용하면 유용할 듯...

heowc commented 6 years ago

array_push : 뒤로 넣음 array_pop : 뒤로 빼냄 array_unshift : 앞으로 넣음 array_shift : 앞에서 빼냄

heowc commented 6 years ago

array_product : 값들을 곱해준다. 비어있다면 1을 반환 array_sum : 값들을 더해준다.

heowc commented 6 years ago

array_reduce : 콜백함수로 array의 반복적인 처리하여 반환 (lambda function / java 진영의 Stream.reduce와 비슷)

heowc commented 6 years ago

array_replace : array의 값을 다른 array를 이용하여 값을 변경

$base = array("orange", "banana", "apple", "raspberry");
$replacements = array(0 => "pineapple", 4 => "cherry");
$replacements2 = array(0 => "grape");

$basket = array_replace($base, $replacements, $replacements2);
Array
(
    [0] => grape
    [1] => banana
    [2] => apple
    [3] => raspberry
    [4] => cherry
)
heowc commented 6 years ago

array_reverse : 역정렬된 array 생성


sort : array 정렬 rsort : array 역정렬 ksort : 키에 의한 array 정렬 krsort : 키에 의한 array 역정렬

shuffle : 임의로 섞음


usort : 사용자 정의 비교 함수를 사용하여 값에 대한 array 정렬 uksort : 사용자 정의 비교 함수를 사용하여 키에 대한 array 정렬 uasort : 사용자 정의 비교 함수를 사용하여 정렬하고 인덱스 연관성 유지


asort : 정렬하고 인덱스 연관성 유지 arsort : 역정렬하고 인덱스 연관성 유지


natsort : 자연순 정렬 natcasesort : 대소문자 구분없이 자연순 정렬

자연순 정렬은 무엇인가?

인덱스 연관성을 유지한다는 말은 무엇인가?

heowc commented 6 years ago

array_search : 값을 array에서 검색 후 키를 반환

heowc commented 6 years ago

array_slice : array의 일부를 새로운 array 생성 array_splice : array의 일부를 삭제한 새로운 array 생성

copy array 용도로 사용 가능 할 듯..

heowc commented 6 years ago

array_unique : 중복값 제거

heowc commented 6 years ago

array_walk : 별도의 스코프(?)로 array의 각 원소에 특정 함수를 적용

로그 찍어보기에 유용할 듯...

heowc commented 6 years ago

compact ↔ extract 가변변수(?)로 새로운 array를 만들어 주고 하는 것 같은데.. 와닿지 않는 느낌이랄까? 잘 모르겠다.

heowc commented 6 years ago

in_array : 배열에 값이 존재 여부 판단(+ 자료형 까지 판단 가능)

array_search와 비슷한 함수

$a = array('1.10', 12.4, 1.13);

if (in_array('12.4', $a, true)) {
    echo "'12.4' found with strict check\n";
}

if (in_array(1.13, $a, true)) {
    echo "1.13 found with strict check\n";
}
1.13 found with strict check
heowc commented 6 years ago

current : 현재 위치 pos : current와 동일 next : 다음 위치 prev : 이전 위취 end : 마지막 위치 reset : 처음 위치

key : 현재 위치의 키

heowc commented 6 years ago

list : 설명으론 이해가 안됨. array의 값을 별도의 스코프에서 꺼내쓸 때 사용

$result = mysql_query ("SELECT id, name, salary FROM employees", $conn);
while (list ($id, $name, $salary) = mysql_fetch_row ($result)) {
    echo " <tr>\n" .
          "  <td><a href=\"info.php?id=$id\">$name</a></td>\n" .
          "  <td>$salary</td>\n" .
          " </tr>\n";
}
heowc commented 6 years ago

range : 일정 step으로 범위의 값을 가진 array 생성

// array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
foreach (range(0, 100, 10) as $number) {
    echo $number;
}
heowc commented 6 years ago

count : array 모든 원소나 프로퍼티의 갯수 sizeof : count와 동일

countsizeof는 호출할때 마다, 다시 계산을 하므로, 다음과 같이 작성해야한다.

$count = count($list);
for ($i = 0; $i < $count; $i++) {
    // ...
}