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) 이렇게 해야 합니다.
<?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 이라는 것을 확인할 수 있습니다.

Tags: php