[php] in_array () 및 다차원 배열

in_array()아래처럼 배열에 값이 있는지 확인하는 데 사용 합니다.

$a = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $a))
{
    echo "Got Irix";
}

//print_r($a);

그러나 다차원 배열 (아래)은 어떻습니까? 다중 배열에 존재하는지 여부를 어떻게 확인할 수 있습니까?

$b = array(array("Mac", "NT"), array("Irix", "Linux"));

print_r($b);

또는 in_array()다차원 배열에 관해서는 사용하지 않아야 합니까?



답변

in_array()다차원 배열에서는 작동하지 않습니다. 이를 위해 재귀 함수를 작성할 수 있습니다.

function in_array_r($needle, $haystack, $strict = false) {
    foreach ($haystack as $item) {
        if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
            return true;
        }
    }

    return false;
}

용법:

$b = array(array("Mac", "NT"), array("Irix", "Linux"));
echo in_array_r("Irix", $b) ? 'found' : 'not found';


답변

검색 할 열을 알고있는 경우 array_search () 및 array_column ()을 사용할 수 있습니다.

$userdb = Array
(
    (0) => Array
        (
            ('uid') => '100',
            ('name') => 'Sandra Shush',
            ('url') => 'urlof100'
        ),

    (1) => Array
        (
            ('uid') => '5465',
            ('name') => 'Stefanie Mcmohn',
            ('url') => 'urlof5465'
        ),

    (2) => Array
        (
            ('uid') => '40489',
            ('name') => 'Michael',
            ('url') => 'urlof40489'
        )
);

if(array_search('urlof5465', array_column($userdb, 'url')) !== false) {
    echo 'value is in multidim array';
}
else {
    echo 'value is not in multidim array';
}

이 아이디어는 PHP 매뉴얼의 array_search () 주석 섹션에 있습니다.


답변

이것도 작동합니다.

function in_array_r($item , $array){
    return preg_match('/"'.preg_quote($item, '/').'"/i' , json_encode($array));
}

용법:

if(in_array_r($item , $array)){
    // found!
}


답변

이것은 그것을 할 것입니다 :

foreach($b as $value)
{
    if(in_array("Irix", $value, true))
    {
        echo "Got Irix";
    }
}

in_array1 차원 배열에서만 작동하므로 각 하위 배열을 반복하여 실행 in_array해야합니다.

다른 사람들이 지적했듯이 이것은 2 차원 배열에만 해당됩니다. 중첩 배열이 더 많으면 재귀 버전이 더 좋습니다. 이에 대한 예는 다른 답변을 참조하십시오.


답변

배열이 이와 같은 경우

$array = array(
              array("name" => "Robert", "Age" => "22", "Place" => "TN"),
              array("name" => "Henry", "Age" => "21", "Place" => "TVL")
         );

이것을 사용하십시오

function in_multiarray($elem, $array,$field)
{
    $top = sizeof($array) - 1;
    $bottom = 0;
    while($bottom <= $top)
    {
        if($array[$bottom][$field] == $elem)
            return true;
        else
            if(is_array($array[$bottom][$field]))
                if(in_multiarray($elem, ($array[$bottom][$field])))
                    return true;

        $bottom++;
    }
    return false;
}

예 : echo in_multiarray("22", $array,"Age");


답변

$userdb = Array
(
    (0) => Array
        (
            ('uid') => '100',
            ('name') => 'Sandra Shush',
            ('url') => 'urlof100'
        ),

    (1) => Array
        (
            ('uid') => '5465',
            ('name') => 'Stefanie Mcmohn',
            ('url') => 'urlof5465'
        ),

    (2) => Array
        (
            ('uid') => '40489',
            ('name') => 'Michael',
            ('url') => 'urlof40489'
        )
);

$url_in_array = in_array('urlof5465', array_column($userdb, 'url'));

if($url_in_array) {
    echo 'value is in multidim array';
}
else {
    echo 'value is not in multidim array';
}


답변

훌륭한 기능이지만,에 추가하기 전까지는 작동하지 않았습니다 if($found) { break; }.elseif

function in_array_r($needle, $haystack) {
    $found = false;
    foreach ($haystack as $item) {
    if ($item === $needle) {
            $found = true;
            break;
        } elseif (is_array($item)) {
            $found = in_array_r($needle, $item);
            if($found) {
                break;
            }
        }
    }
    return $found;
}