개발
백엔드
PHP 배열, 다중배열속의 값 검사
475 views as of March 4, 2019.
⚠ 이 글은 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값을 이용해 시간...
12/31/2018
Ajax를 이용해 Post 요청하는 방법들
jQuery 웹 프로그래밍을 하다보면 Ajax를 이용한 비동기 로딩을 하는 경우가 발생합니다. 비동기 로딩은 정말 리액티브한 웹을...
12/31/2018
PHP 개행문자(엔터)나 특정 태그를 제거하는 방법
디비를 같이 운영하는 웹사이트에서는 저장되거나 화면에 띄워줄 데이터를 가공하는 경우가 발생합니다. 저같은 경우는 접속자의...