Array Search para Arrays Multidimensionais no PHP


Se você possui um array simples, verificar se um dado valor existe nele é muito fácil através da função array_search, mas como verificar se um valor existe em um array com duas dimensões?

Antes de seguirmos, veja como seria fácil fazer uma busca por um dado valor em um array de uma dimensão:

1
2
3
4
5
6
7
8
9
10
11
12
$array = array("banana","uva","melancia");
 
 
if(array_search("uva",$array) !== false){
 
    echo "fruta encontrada";
 
}else{
 
    echo "fruta não encontrada";
 
}
$array = array("banana","uva","melancia");


if(array_search("uva",$array) !== false){

	echo "fruta encontrada";

}else{

	echo "fruta não encontrada";

}

A função array_search permite três parâmetros, o primeiro é o valor que deve ser buscado, o segundo é o array onde a consulta deve ser feita e o terceiro (opcional) define se a busca deve levar em consideração o tipo de dado ou não. No caso, se você definir o terceiro parâmetro para true, o valor 1 será considerado diferente de “1”, pois o primeiro é inteiro e o segundo é uma string, entendeu?

Array Search para Arrays Multidimensionais no PHP

Como você viu, verificar se um dado valor existe em um array é muito fácil, mas como fazer isso em um array deste tipo a seguir:

1
2
3
4
5
6
7
$array = array();
 
$array["fruta1"] = array("banana","branca");
 
$array["fruta2"] = array("uva","verde");
 
$array["fruta3"] = array("melancia","vermelha");
$array = array();

$array["fruta1"] = array("banana","branca");

$array["fruta2"] = array("uva","verde");

$array["fruta3"] = array("melancia","vermelha");

Agora, o array_search não será mais capaz de encontrar a fruta “uva”, pois trata-se de um array de duas dimensões, e as funções para se trabalhar com arrays foram criadas para funcionar com arrays de apenas uma dimensão. Para contornar isso, uma solução é você usar um loop com foreach e consultar cada elemento do array, veja:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function array_search_multi($busca, $arrays){
    
    foreach($arrays as $array){
        
        if($i=array_search("uva",$array) !== false){
            
            return $i;
            
        }
    
    }
    
    return false;
 
}
 
 
if($i=array_search_multi("uva",$array) !== false){
 
    echo "fruta encontrada no indice " . $i;
 
}else{
 
    echo "fruta não encontrada";
 
}
function array_search_multi($busca, $arrays){
	
	foreach($arrays as $array){
		
		if($i=array_search("uva",$array) !== false){
			
			return $i;
			
		}
	
	}
	
	return false;

}


if($i=array_search_multi("uva",$array) !== false){

	echo "fruta encontrada no indice " . $i;

}else{

	echo "fruta não encontrada";

}

Com esta função que eu criei, tu poderá consultar array multidimensionais facilmente. Repare no comando de comparação !==, isso indica que é uma comparação de tipo de dado. Essa comparação é necessária pois as vezes o retorno da função pode ser 0, e 0 se comparado com == equivale a false. Ora, 0 é uma posição de índice válida para um array, então é necessário verificar se o retorno da função é realmente false ou um índice 0.

Array Search para Arrays Multidimensionais no PHP: Extrapolando

Agora imagine o seguinte array:

1
2
3
4
5
6
7
8
9
$array = array();
 
$array["fruta1"] = "banana";
 
$array["fruta2"] = array("uva","verde");
 
$array["fruta3"] = array(array("melancia","vermelha"),array("melancia","verde"));
 
$array["fruta4"] = array(array( array("tomate","vermelho"),array("tomate","verde")),array("tomate","branco"));
$array = array();

$array["fruta1"] = "banana";

$array["fruta2"] = array("uva","verde");

$array["fruta3"] = array(array("melancia","vermelha"),array("melancia","verde"));

$array["fruta4"] = array(array( array("tomate","vermelho"),array("tomate","verde")),array("tomate","branco"));

Este é um array variado, que possui uma dimensão, duas dimensões, três dimensões e quatro dimensões. Como fazer uma consulta num array deste tipo? Bem, veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function array_search_multi($busca, $arrays){
        
    foreach($arrays as $array){
        
        if(is_array($array)){
        
            if(array_search_multi($busca,$array)) return true;
        
        }else{
            
            if($busca == $array) return true;
            
        }
    
    }
    
    return false;
 
}
 
 
if(array_search_multi("branco",$array) != false){
 
    echo "fruta de cor branca encontrada";
 
}else{
 
    echo "fruta de cor branca não encontrada";
 
}
function array_search_multi($busca, $arrays){
		
	foreach($arrays as $array){
		
		if(is_array($array)){
		
			if(array_search_multi($busca,$array)) return true;
		
		}else{
			
			if($busca == $array) return true;
			
		}
	
	}
	
	return false;

}


if(array_search_multi("branco",$array) != false){

	echo "fruta de cor branca encontrada";

}else{

	echo "fruta de cor branca não encontrada";

}

Esta função, agora, irá retornar apenas true ou false, até porque, saber o índice de um array multidimensional não significa nada, pois como você saberá em qual dimensão o valor buscado foi encontrado? Ainda assim a função é útil para saber de um dado valor existe ou não em um array de várias dimensões.

No exemplo, fiz uma busca por qualquer fruta de cor branca e encontrei. Agora, se a intenção é apenas saber se o valor existe ou não, veja essa ideia abaixo:

1
2
3
4
5
6
7
8
9
10
11
$string =  serialize($array);
 
if(strpos($string,'"branco"') !== false){
    
    echo "fruta de cor branca encontrada";
    
}else{
    
    echo "fruta de cor branca não encontrada";
    
}
$string =  serialize($array);

if(strpos($string,'"branco"') !== false){
	
	echo "fruta de cor branca encontrada";
	
}else{
	
	echo "fruta de cor branca não encontrada";
	
}

O código acima é muito mais rápido que a função recursiva sugerida anteriormente, pois apenas serializei o array todo e busquei por uma ocorrência da palavra “branco”, o qual retornará a posição em que a string foi encontrada através da função strpos do PHP. Muito mais fácil e simples, né gente?

Conclusão

Quem é programador PHP sabe que é comum se pegar trabalhando com arrays, e em alguns casos, com arrays multidimensionais. Nestes casos, ter em mãos alguns códigos ou ideias para procurar valores em arrays deste tipo, só tende a ajudar. Espero que as dicas sejam úteis para você.

Mas, e você, caro programador PHP, como faz para verificar existência de valores em arrays multidimensionais? Deixe sua dica aqui nos comentários, todos agradecem!

Até já!

Array Search para Arrays Multidimensionais no PHP
4.8 (95.14%) 37 votes

Leave a Reply