[PHP]배열 key의 min 또는 max 구하기

PHP로 개발을 하다보면, 연관 배열을 많이 쓰게되는데요

아래와 같은 배열에서 cnt의 max값과 min값을 구하려면 어떻게 해야할까요?

또는 이러한 배열에서 특정 키값의 값만 뽑아 배열로 만들고싶다면 어떻게 해야할까요?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
array(3) {
[0]=>
array(3) {
["title"]=>
string(5) "apple"
["cnt"]=>
int(1) "5"
["color"]=>
string(5) "green"
}
[1]=>
array(3) {
["name"]=>
string(4) "pear"
["cnt"]=>
int(1) "8"
["color"]=>
string(6) "yellow"
}

배열을 순회하여 해당 키의 값을 뽑아 배열을 만들고,

최소 또는 최대값이 필요하면 min 또는 max 함수를 적용해야 한다 생각했습니다.

그런 코드는 만들고 싶지 않아 검색을 하다보니

PHP 5.5버전부터는 array_column을 사용하면 쉽게 처리할 수 있었습니다.

array array_column ( array $input , mixed $column_key [, mixed $index_key = NULL ] ) 와 같은 구조로

첫번째 파라미터에 해당 배열을 넣고, 두번째 파라미터에 뽑아낼 key를 넣으면 됩니다.

예를들어 아래와 같은 연관 배열에서 cnt로만 배열을 만들려면 이와 같이 할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$arr = [
[
'title'=>'title1',
'cnt'=>2,
'color'=>'blue',
],
[
'title'=>'title2',
'cnt'=>3,
'color'=>'blue',
],
];

$cntArr = array_column($arr, 'cnt');
var_dump($cntArr);

### Result
array(2) {
[0]=>
int(2)
[1]=>
int(3)
}

또한 세번째 파라미터로는 index_key를 넣을 수 있는데요

return 할 배열의 키로 사용할 값을 넣으면 됩니다 예를들어 이렇게 쓸 수 있을것 같았습니다.

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
<?php
// example code

$arr = [
[
'idx' => 2555,
'title'=>'title1',
'cnt'=>2,
'color'=>'blue',
],
[
'idx' => 2982,
'title'=>'title2',
'cnt'=>3,
'color'=>'blue',
],
];

$cntArr = array_column($arr, 'cnt', 'idx');
var_dump($cntArr);

### Result
array(2) {
[2555]=>
int(2)
[2982]=>
int(3)
}

이와같이 사용하면 해당 idx의 cnt를 뽑을 수 있어 더 효율적으로 사용할 수 있을거 같습니다.

더 좋은 사용 방안 있으시면 댓글로 부탁드리겠습니다.

참고자료

[PHP]배열 key의 min 또는 max 구하기

https://blog.hodory.dev/2018/10/27/php-array-column/

Author

Hodory

Posted on

2018-10-27

Updated on

2022-08-11

Licensed under

댓글