Development Tip

PHP : 값과 키가 다차원 배열에 존재하는지 확인

yourdevel 2020. 12. 29. 08:00
반응형

PHP : 값과 키가 다차원 배열에 존재하는지 확인


이것으로 나에게 도움을 줄 수 있는지 궁금합니다.

다차원 배열이 있습니다 ...

$my_array = array(    
        0 =>  array(  
            "name"   => "john",  
            "id"    =>  4  
        ),  
        1   =>  array(  
            "name" =>  "mark",  
            "id" => 152  
        ), 
    2   =>  array(  
            "name" =>  "Eduard",  
            "id" => 152  
        )
);

배열 $ my_array에 "id"키와 그 값이 152 인 값이 포함되어 있는지 확인하는 가장 빠르고 효율적인 방법이 무엇인지에 대한 아이디어가 있습니다. 값을 에코하거나 사용할 필요가 없습니다. 배열에 ID가 "key"이고 값이 "152"인 레코드가 있는지 확인 (true 반환)하면됩니다.


단순한 루프보다 더 빠른 것은 없습니다. 이를 수행하기 위해 일부 배열 함수를 혼합 및 일치시킬 수 있지만 루프로 구현 될 수도 있습니다.

function whatever($array, $key, $val) {
    foreach ($array as $item)
        if (isset($item[$key]) && $item[$key] == $val)
            return true;
    return false;
}

다음은 다차원 배열을 충족시킬 Dan Grossman의 답변의 업데이트 버전입니다 (내가 이후에 있었던 것).

function find_key_value($array, $key, $val)
{
    foreach ($array as $item)
    {
        if (is_array($item) && find_key_value($item, $key, $val)) return true;

        if (isset($item[$key]) && $item[$key] == $val) return true;
    }

    return false;
}

** PHP> = 5.5

단순히 이것을 사용할 수 있습니다

$key = array_search(40489, array_column($userdb, 'uid'));

이 다차원 배열을 가정 해 봅시다 :

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

(1) => Array
    (
        (uid) => '5465',
        (name) => 'Stefanie Mcmohn',
        (pic_square) => 'urlof100'
    ),

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

$key = array_search(40489, array_column($userdb, 'uid'));

많은 "id"조회를해야하고 정말 빠르다면 모든 "id"를 키로 포함하는 두 번째 배열을 사용해야합니다.

$lookup_array=array();

foreach($my_array as $arr){
    $lookup_array[$arr['id']]=1;
}

이제 기존 ID를 매우 빠르게 확인할 수 있습니다. 예를 들면 다음과 같습니다.

echo (isset($lookup_array[152]))?'yes':'no';

귀하의 질문에서와 같이 실제로 간단한 2D 배열이 더 좋지 않습니까? 봐-

2 차원 배열 이름 $ my_array와 찾을 값이 $ id라고 가정 해 보겠습니다.

function idExists($needle='', $haystack=array()){
    //now go through each internal array
    foreach ($haystack as $item) {
        if ($item['id']===$needle) {
            return true;
        }
    }
    return false;
}

그리고 그것을 부르려면 :

idExists($id, $my_array);

보시다시피, 실제로 key_name 'id'만있는 내부 인덱스가 $ value가 있는지 확인합니다. key_name 'name'에도 $ value가있는 경우 여기에 다른 답변도 true가 될 수 있습니다.


return 0 < count(
    array_filter(
        $my_array,
        function ($a) {
            return array_key_exists('id', $a) && $a['id'] == 152;
        }
    )
);

참고 : array_key_exists전화는 선택 사항입니다. 코드 강건 함을 제공합니다.


아래 코드로 시도하십시오. 모든 종류의 다차원 배열 검색에 대해 제대로 작동해야합니다.

여기에서 라이브 데모 예제를 볼 수 있습니다.

function multi_array_search($search_for, $search_in) {
    foreach ($search_in as $element) {
        if ( ($element === $search_for) ){
            return true;
        }elseif(is_array($element)){
            $result = multi_array_search($search_for, $element);
            if($result == true)
                return true;
        }
    }
    return false;
}

A good solution can be one provided by @Elias Van Ootegan in a comment that is:

$ids = array_column($array, 'id', 'id');
echo isset($ids[40489])?"Exist":"Not Exist";

I tried it and worked for me, thanks buddy.

Edited

Note: It will work in PHP 5.5+


The simplest way is this:

$my_array = array(    
    0 =>  array(  
        "name"   => "john",  
        "id"    =>  4  
    ),  
    1   =>  array(  
        "name" =>  "mark",  
        "id" => 152  
    ), 
    2   =>  array(  
        "name" =>  "Eduard",  
        "id" => 152  
    )
);

if (array_search(152, array_column($my_array, 'id')) !== FALSE)
  echo 'FOUND!';
else
  echo 'NOT FOUND!';

Use an array_map()

$options is the array in which you are searching.

$arr = array_map(function($ar) {
    if(array_key_exists('name_of_the_key_you_search_for',$ar)){
        return true;
    }else{
        return false;
    }
},$options  );
var_dump($arr); //just for test, remove in the code

I wrote the following function in order to determine if an multidimensional array partially contains a certain value.

function findKeyValue ($array, $needle, $value, $found = false){
    foreach ($array as $key => $item){
        // Navigate through the array completely.
        if (is_array($item)){
            $found = $this->findKeyValue($item, $needle, $value, $found);
        }

        // If the item is a node, verify if the value of the node contains
        // the given search parameter. E.G.: 'value' <=> 'This contains the value'
        if ( ! empty($key) && $key == $needle && strpos($item, $value) !== false){
            return true;
        }
    }

    return $found;
}

Call the function like this:

$this->findKeyValue($array, $key, $value);

function checkMultiArrayValue($array) {
        global $test;
        foreach ($array as $key => $item) {

            if(!empty($item) && is_array($item)) {
                checkMultiArrayValue($item);
            }else {
                if($item)
                 $test[$key] = $item;

            }
        }
        return $test;   
    }

 $multiArray = array(    
                0 =>  array(  
                      "country"   => "",  
                      "price"    => 4,  
                      "discount-price" => 0,  
               ),);

$test = checkMultiArrayValue($multiArray);
echo "<pre>"
print_r($test);

Will return array who have index and value

ReferenceURL : https://stackoverflow.com/questions/6990855/php-check-if-value-and-key-exist-in-multidimensional-array

반응형