logo

배열, 다중배열속의 값 검사

Server Side March 04, 2019

PHP는 배열안의 데이터를 검사하는 메소드가 언어에서 지원해주는것이 있습니다.

 

검사할 데이터와 대상 배열을 파라미터로 전달해주면 배열을 순차적으로 검사 후 데이터의 유무에 따라 논리값을 반환해요.

거기에 좀만 응용해서 다시 메소드로 감싸서 논리값에 따라 내가 필요한 결과 스트링값을 아래와 같이 바꿔줄 수 있어요.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
/**
 * in_array($needle, $haystack) 결과값에 따라 반환하는 값을 세번째 인수값으로 반환합니다.
 * 결과값이 FALSE면 "" 빈 스트링값을 반환합니다.
 * @param $needle
 * @param $haystack
 * @param $result
 * @return string
 */
function in_array_result($needle$haystack$result) {
  if (in_array($needle$haystack))
    return $result;
 
  return '';
}
cs

 

근데 만약에 다중배열에서 배열값을 검사해야될때는 어떻게 할까요?

아쉽게도 PHP는 1차원 배열에서의 값 검사 메소드만 지원하고있습니다. 조금 응용을 하면 아래와 같이 다중배열에서의 in_array 메소드도 구축할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
/**
 * in_array() 함수의 다차원 배열용 재귀함수 입니다.
 * @param $needle
 * @param $haystack
 * @param bool $strict
 * @return bool
 */
function in_array_recursive($needle$haystack$strict = FALSE) {
  foreach ($haystack as $item) {
    if (($strict ? $item === $needle : $item == $needle|| (is_array($item&& in_array_recursive($needle$item$strict)))
      return true;
  }
  return false;
}
cs

 

배열 안의 값이 또 배열일 경우에는 재귀함수로 다음 값을 순차적으로 검색합니다.

조금 복잡해보이지만 재귀함수의 구조만 파악할 수 있다면 별로 어려운 로직이 아님을 알 수 있을꺼에요. 마찬가지로 응용또한 가능할것이구요.

 

 

마지막으로 위의 in_array_result 처럼 다중배열에서도 아래와 같이 반환값을 내가 원하는 스트링 값으로 대체할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
/**
 * in_array() 함수의 다차원 배열용 재귀함수 결과값에 따라 반환하는 값을 세번째 인수값으로 반환합니다.
 * 결과값이 FALSE면 "" 빈 스트링값을 반환합니다.
 * @param $needle
 * @param $haystack
 * @param $result
 * @param bool $strict
 * @return string
 */
function in_array_recursive_result($needle$haystack$result$strict = FALSE) {
  if (in_array_recursive($needle$haystack$strict))
    return $result;
 
  return '';
}
cs

 

야-호!