PHP에서 배열검색할 때 사용하는 array_search, array_column 사용방법을 정리해보겠습니다.
ToC on/off
개요
PHP에서 배열에 들어 있는 값을 검색하거나 인덱스를 찾아야 할 때 사용하는 함수가 array_search 입니다.
array_search 사용법을 1차원 배열과 2차원 배열 각각의 경우에 대해 살펴보겠습니다.
1차원 배열 검색
1차원 배열에서는 간단하게 array_search(검색할 값, 배열) 형식으로 검색할 수 있고, 검색할 값의 인덱스가 리턴됩니다.
<?php
$arr_test_01 = array(101, 202, 303, 404, 505);
$arr_test_02 = array("cpu"=>"intel", "memory"=>"hynix", "graphic"=>"nvidia", "monitor"=>"lg");
$idx_search_01 = array_search(303, $arr_test_01);
$idx_search_02 = array_search("nvidia", $arr_test_02);
echo($idx_search_01);
echo("<br />");
echo($idx_search_02);
echo("<br />");
?>
// 결과
2
graphic
비교 연산자
array_search 함수는 일치하는 값이 없을 때 false를 반환합니다.
그런데 이때 반환 값을 비교해야 할 때는 ==가 아닌 ===를 사용해야 합니다.
아래 예에서 살펴보면 101 값을 검색하면 반환되는 값은 첫번째 값이므로 인덱스 0을 반환하게 됩니다.
그래서 if ($idx_search_03 == false) 이렇게 비교하면 값이 참이 되어 버립니다.
그러므로 올바르게 비교하려면 if ($idx_search_03 === false) 이렇게 해야 합니다.
그런데 이때 반환 값을 비교해야 할 때는 ==가 아닌 ===를 사용해야 합니다.
아래 예에서 살펴보면 101 값을 검색하면 반환되는 값은 첫번째 값이므로 인덱스 0을 반환하게 됩니다.
그래서 if ($idx_search_03 == false) 이렇게 비교하면 값이 참이 되어 버립니다.
그러므로 올바르게 비교하려면 if ($idx_search_03 === false) 이렇게 해야 합니다.
<?php
$idx_search_03 = array_search(101, $arr_test_01);
if ($idx_search_03 == false)
{
echo("FALSE");
}
else
{
echo("TRUE");
}
echo("<br />");
if ($idx_search_03 === false)
{
echo("FALSE");
}
else
{
echo("TRUE");
}
echo("<br />");
/*
FALSE
TRUE
*/
?>
2차원 배열 검색
2차원 배열에서는 조금 복잡한데, array_column 함수를 함께 사용해야 합니다.
<?php
$arr_user_info = array(
0=> array(
"id" => "kim",
"name" => "김철구",
"birthday" => "2001-07-20"
),
1 => array(
"id" => "hong",
"name" => "홍길동",
"birthday" => "2002-01-01"
),
2=> array(
"id" => "lee",
"name" => "이지은",
"birthday" => "2003-12-27"
)
);
$idx_search_04 = array_search("홍길동", array_column($arr_user_info, "name"));
$result_search = $arr_user_info[$idx_search_04]["id"];
echo($idx_search_04);
echo("<br />");
echo($result_search);
echo("<br />");
var_dump(array_column($arr_user_info, "name"));
echo("<br />");
/*
결과
1
hong
array(3) { [0]=> string(9) "김철구" [1]=> string(9) "홍길동" [2]=> string(9) "이지은" }
*/
?>
array_column
함수는 지정한 column의 데이터만 별도로 분리해서 배열에 저장합니다.
여기서는 [name] column의 데이터만 따로 분리한 배열을 저장했으므로 다음과 같은 데이터가 들어 있습니다.
array(3) { [0]=> string(9) "김철구" [1]=> string(9) "홍길동" [2]=> string(9) "이지은" }
여기서 array_search 함수로 [홍길동]이라는 값을 검색하면 인덱스 값은 1이 되고
$arr_user_info[$idx_search_04][“id”]에서 인덱스값 1을 지정하면 name이 홍길동인 데이터의 id가 hong 이라는 것을 확인할 수 있습니다.