logo

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

2019. 03. 04.

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

 

야-호!

Ajax를 이용해 Post 요청하는 방법들

Ajax를 이용해 Post 요청하는 방법들

2018. 12. 31.
개행문자(엔터)나 특정 태그를 제거하는 방법

개행문자(엔터)나 특정 태그를 제거하는 방법

2018. 12. 31.
랜덤으로 한글이름 생성하기

랜덤으로 한글이름 생성하기

2018. 12. 27.
로그 더 보기