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
'Development Tip' 카테고리의 다른 글
Mockito로 new () 호출이있는 테스트 클래스 (0) | 2020.12.29 |
---|---|
기본 클래스의 메서드 호출 (0) | 2020.12.29 |
Python : WTForms 필드를 초기화 할 때 자리 표시 자 속성을 추가 할 수 있습니까? (0) | 2020.12.29 |
rbind 오류 : "이름이 이전 이름과 일치하지 않습니다" (0) | 2020.12.29 |
Java 기본 유형을 인수로 사용하여 리플렉션하여 메서드를 호출하는 방법 (0) | 2020.12.29 |