개발
PHP 배열, 다중배열속의 값 검사
⚠ 이 글은 2년 이상 지난 이야기에요. 읽으실때 참고!
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
0
개의 댓글
개발 카테고리의 다른 글
03/04/2019
PHP 시간 차 계산
현재시간을 기준으로 서비스의 제공 유무를 판단할 때 구해야 하는 시간 차를 계산하는 코드입니다. timestamp값을 이용해 시간차를 반환할 수 있도록 PHP의 intval 메소드를 활용해 만들어봅시다.반환된 timestamp 값의 크기는 흔히 서비스에서 이용해야되는 초/분/시간/일 단위가 아니므로 필요에 따라 원하는 시간 규격...

12/31/2018
Ajax를 이용해 Post 요청하는 방법들
jQuery 웹 프로그래밍을 하다보면 Ajax를 이용한 비동기 로딩을 하는 경우가 발생합니다. 비동기 로딩은 정말 리액티브한 웹을 구성하는데 있어 필수 불가결이지만 클라이언트 성능이 따라 어떻게 작용될지 모르는 사항이라... 이리저리 생각하고 따져봐야할게 많기도합니다. 그만큼 여러가지 상황에 대한 UI/UX 서포트도...
12/31/2018
PHP 개행문자(엔터)나 특정 태그를 제거하는 방법
디비를 같이 운영하는 웹사이트에서는 저장되거나 화면에 띄워줄 데이터를 가공하는 경우가 발생합니다. 저같은 경우는 접속자의 세션값이나 쿠키값을 print_r()을 통해 문자열 데이터로 받았는데 그 문자열 내부에 개행문자와 중복된 띄어쓰기가 많아서 이런 내용을 제거하기 위해 찾아보다가 발견한 방법입니다. 일반적으...