[PHP] 배열에서 특정값을 찾아 지우기 - array_search, array_splice
(1) 배열에서 특정 요소값의 자리 찾기 - array_search()
array_search 함수는 특정 요소값이 처음 있는 자리값을 돌려 준다.
▣ 형식 : array_search(찾을 값, 배열)
$a = array(1, 2, 3, 4, 5);
$b = array_search(1, $a);
$c = array_search(3, $a);
$d = array_search(7, $a);
print('$a : '); var_dump($a); print('<br />');
print('$b : '); var_dump($b); print('<br />');
print('$c : '); var_dump($c); print('<br />');
print('$d : '); var_dump($d); print('<br />');
▣ 출력 결과
$a : array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
$b : int(0)
$c : int(2)
$d : bool(false)
찾는 값이 배열의 맨 첫 요소에 있으면 0을 돌려받는다. (자리값은 0부터 매김)
찾는 값이 배열에 없으면 bool 값으로 false를 돌려받는다.
※ arrray_search 함수가 돌려주는 값 false와 0은 뜻이 다르다.
(2) 배열에서 특정 자리의 요소 잘라내기 - array_splice()
array_splice 함수는 지정한 배열에서 특정 자리값에서 지정한 요소 개수만큼 잘라내고, 잘라낸 요소들을 배열로 돌려 준다.
▣ 형식 : array_splice(배열, 자를 자리, 자를 요소 수)
$a = array(1, 2, 3, 4, 5, 6);
$b = $a;
$c = array_splice($b, 2, 1);
print('$a : '); var_dump($a); print('<br />');
print('$b : '); var_dump($b); print('<br />');
print('$c : '); var_dump($c); print('<br />');
▣ 출력 결과
$a : array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) }
$b : array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(4) [3]=> int(5) [4]=> int(6) }
$c : array(1) { [0]=> int(3) }
$b = $a에서 참고값이 아닌 값이 복사되는 '깊은 복사'가 일어난다.
$b = array_splice($b, 2, 1);에서 $b에는 $a에서 요소 하나(3)를 잘라낸 배열이 들어가고, $c에는 잘라낸 요소 1개가 든 배열이 들어간다.
(3) 배열에서 특정 요소값을 1번 지우기
array_splice 함수로 array_search 함수를 함께 써서 배열에서 특정 요소값을 뺄 수 있다.
▣ 형식 : array_splice(배열, array_search(찾을 값, 배열), 1)
$a = array(1, 2, 3, 3, 4, 5);
array_splice($b, array_search(3, $a), 1);
print('$a : '); var_dump($a); print('<br />');
print('$b : '); var_dump($b); print('<br />');
▣ 출력 결과
$a : array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(3) [4]=> int(4) [5]=> int(5) }
$b : array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
$a에서 요소 3이 한 번 지워진 배열이 $b에 들어갔다.
$a에는 요소 3이 2개 있고, $b는 요소 3이 1개로 줄었다.
(4) 배열에서 특정 요소값을 모두 지우기
array_splice 함수와 array_search 함수를 여러 번 써서 배열의 특정 요소값을 모두 뺄 수 있다.
$a = array(1, 2, 3, 3, 4, 5);
$b = $a;
while(($c = array_search(3, $b)) !== false) array_splice($b, $c, 1);
print('$a : '); var_dump($a); print('<br />');
print('$b : '); var_dump($b); print('<br />');
print('$c : '); var_dump($c); print('<br />');
▣ 출력 결과
$a : array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(3) [4]=> int(4) [5]=> int(5) }
$b : array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(4) [3]=> int(5) }
$c : bool(false)
앞에서 보았듯이 arrray_search 함수가 돌려주는 값 false와 0의 뜻이 다름을 눈여겨 보아야 한다. false와 0을 잘못 가리면 while 반복문이 끝없는 뺑뺑이(무한 루프)에 빠질 수 있다. 0과 false를 가리려고 비교 연산자 !=를 쓰지 않고 !==를 썼다.
덧글을 달아 주세요