이 글은 2년 이상 지난 이야기에요. 읽으실때 참고!
개발
PHP 개발 일지

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

436 views as of March 4, 2019.

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

 

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

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


<?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 '';
}Copy


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

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



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

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


<?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;
}
Copy


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


<?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 '';
}Copy


야-호!

#개발 #PHP #다중배열 #in_array
0 개의 댓글
×