[알고리즘] php의 다양한 array 함수 활용

[알고리즘] php의 다양한 array 함수 활용





저도 중급이라하긴 실력이 딸리지만.. 

그래도 오랜만에 작업하다보니 이렇게 하면 좋을것 같은 몇가지 이슈가 있어 정리합니다. 


우선 현재 개발중인 환경입니다. 


개발환경 


1.PHP 5.3, mariaDB 5.5, codeigniter2.1.4 


2.사용한 스크립트 

 - htmlshiv.js , respond.min.js , json2.js = ie8 호환 

 - bootstrap3.2 css,js = css framework 

 - jquery1.8.3 , jqueryUI 1.9.2 

 - http://github.com/davidchambers/Base64.js = ie8 호환 base64 

 - aes, aes-ctr js = AES 암호화 모듈 


3.사용한 libraries 

 - My_pagination = 한국식으로 바꾼 페이징처리 

 - Parser = CI + template_ 사용 

 - Aes PHP = AES 암호화 모듈 



php 에는 다양한 array 함수들이 있는데요. 

이중에 제가 사용한 함수들은 (array_map, array_merge, array_intersect_key,array_fill_keys) 입니다. 


1. array_map(함수,배열) 

배열에 있는 모든 키를 돌려 함수를 처리해줍니다. 

foreach 나 while 문등을 사용하지않고 배열안의 암호화나 validation 등을 할때 편하겠죠? 

전 AES 암호화 하는데 사용했습니다. 



2. array_merge(배열1,배열2) 

배열1에 배열2를 더합니다. 

두 배열을 합쳐 키 순대로 sort 되어 들어가는듯하구요. 

전 array_intersect_key 에 포함되지 않는 임의 값들을 따로 넣어 합치기위해 사용했습니다. 


3. array_intersect_key(원본배열, 여깄는것만 추가 할 배열)  

함수명에도 나와있다싶이 key 기준으로 값이 들어가게 됩니다. 

return 되는 변수에 정리된 배열값이 들어가게 되구요. 

여기서 중요한건 값을 넣을 2번째 배열에 key와 value 가 지정되어 있어야 하며, 

값이 없는경우 array ( ); 이 출력됩니다. 

2번째 배열에 key와 value가 모두 있다면, 1번째 배열에 있는 value 값이 2번째 배열로 넘어와 return 해줍니다. 


4. array_fill_keys(배열,값) 

$array=('pass','test','id') 등으로 선언되었을때 value값이 없는데요. 

array_fill_keys($array, 'jaweb') 으로 넣어주게되면 

array = [ 

  'pass'=>'jaweb', 

  'test'=>'jaweb', 

  'id'=>'jaweb', 

]; 

이것처럼 모두 같은값을 넣어줍니다. 


작업소스를 보시면 아시겠지만, 

기본적으론 Codeigniter 에서 지원하는 $this->input->post() 값을 토대로 작업했는데요. 

$postData 에 담아 하나하나 작성해도 되지만 

좀더 짧고 간결한? ; (메모리이득이 있을라나요..;) 

소스를 만들기 위해 위 함수를 사용해 정리하였습니다. 


뭐 사용법은 다들 하기 나름이니..ㅇㅇ.. 

넵..

[ ▼ 참고 Source ]

/*공통 helper*/

function aesEncrypt($data){
	return AesCtr::encrypt($data, AES_PASS, 256);
}


/*다른파일의 controller*/
	$postData = $this->input->post();
	$orderData = array_map('aesEncrypt', 
		array_merge(
			array_intersect_key($postData,array_fill_keys( //array1
				array(
					'oName','oMail','oHp','oTel',
					'odNam,','odMail,','odHp','odTel',
					'odDate','odAddr','odMessage','odContents',
					'oPrice','oPay'
				), NULL) // postData 에 있는 것중 아래 영역에 설정한 배열의 값만 가져와 삽입처리함.
			),array( //array2
				'oHidden'	=> (isset($postData['oHidden']))?'Y':'N',
				'oSecure'	=> (isset($postData['oSecure']))?'Y':'N',
				'odDateFast'=> (isset($postData['odDateFast']))?'Y':'N',
				'oIP'		=> $this->input->ip_address()
			)
		) //end array_merge , 두개 배열을 합쳐 model-order에 보낼 값을 정리함.
	);//end array_map

	/*	위에있는 array_merge, array_intersect_key, array_fill_keys 를 쓰지 않은경우.
	$orderData = array_map('aesEncrypt', array(
		'oName'		=> $postData['oName'],
		'oMail'		=> $postData['oMail'],
		'oHp'		=> $postData['oHp'],
		'oTel'		=> $postData['oTel'],
		'odName'	=> $postData['odName'],
		'odMail'	=> $postData['odMail'],
		'odHp'		=> $postData['odHp'],
		'odTel'		=> $postData['odTel'],
		'odDate'	=> $postData['odDate'],
		'odAddr'	=> $postData['odAddr'],
		'odMessage'	=> $postData['odMessage'],
		'odContents'=> $postData['odContents'],
		'oHidden'	=> (isset($postData['oHidden']))?'Y':'N',
		'oSecure'	=> (isset($postData['oSecure']))?'Y':'N',
		'odDateFast'=> (isset($postData['odDateFast']))?'Y':'N',
		'oPrice'	=> $postData['oPrice'],
		'oPay'		=> $postData['oPay'],
		'oIP'		=> $this->input->ip_address()
	));
	*/