abr201027
John Marques
2
Array_diff – Diferença entre Arrays
Olá pessoal,
olha eu aqui de novo. rs.
Seguinte hoje vou falar sobre o array_diff, que foi uma mão, melhor um braço na roda para mim, pois estou trabalhando com URL amigáveis em um sistema e ele me ajudou muito, então vamos lá.
Extraído do Manual PHP
array_diff
“Analisa as diferenças entre arrays”
Então, ai você me pergunta para que? Ai eu digo imagine que você tem elementos em um vetor e quer saber quais dele não contém em outro (lembrei das aulas de matemática da escola contém e não contém, haushhuas), então no meu caso o que aconteceu foi o seguinte, eu tinha uma URL e queria saber as partes dessa que não contia na variavel que contém a url raiz.
Assim,
Ex.:
Variável contendo a url raiz do site
$url_raiz = 'http://www.johnmarques.com.br/novo_site/';
ai por exemplo o url requisitada nesse momento seja http://www.johnmarques.com.br/novo_site/2010/, então eu queria que sistema soubesse que a diferença era a “pasta” 2010, dei um olhada por cima no Senhor da Internet, procurando por diferença entre Strings, mas não achei muita coisa ai, pensei putz por que não quebra a url em partes de um vetor e depois fazer uma comparação, então foi isso que fiz, e Bingo! ;D
Vou demonstrar mais ou menos como fiz.
Antes de explicar, vale lembrar que a função array_diff não faz diferenciação entre vetores multi-dimensionais então você tem que diferenciar vetores no mesmo nível.
Extraído do Manual PHP
Nota: Note que esta função faz compara apenas uma dimensão de um array com dimensão n. Mas, obviamente, você pode comparar outras dimensões usando array_diff($array1[0], $array2[0]);.
e que também ele faz uma comparação igual a operador de comparação de semelhança (===), sendo assim mais ou menos isso, (string) $elem1 === (string) $elem2.
Outra coisa que vale resaltar e que ele verifica os elementos que vetor 01 e que não contém no vetor 02 e as chaves desses elementos são preservadas.
Agora o exemplo.
fiz mais ou menos assim:
<?php
$url_raiz = 'http://www.johnmarques.com.br/novo_site/';
$url_req = $_SERVER['REQUEST_URI']; // No caso o valor seria /novo_site/2010/, perceba que não tem o dominio, então eu fiz assim na variavel $url_raiz, dividi em duas
$url_dominio = 'http://www.johnmarques.com.br';
$url_base = '/novo_site/';
$url_raiz = $url_dominio . $url_base;
$url_req = $_SERVER['REQUEST_URI'];
// Ai ficou mais fácil fazer a comparação
function retorna_vetor($url)
{
$partes = explode('/',$url);
$i=0;
$partes_new = array();
foreach($partes as $key => $value)
{
if($value != '')
{
$partes_new[$i] = $value;
$i++;
}
}
return $partes_new;
}
// faço o mesmo processo no outro
$vetor_req = retorna_vetor($url_req);
$vetor_raiz = retorna_vetor($url_base);
print_r(array_diff($vetor_req,$vetor_raiz)); // provávelmente irá retorna array(1=>2010)
?>
ai ficou fácil,
espero que tenha alguma serventia, para mim pelo menos foi um braço na roda, se alguém tiver um forma melhor de ser feito pode comentar e explicar como funcionaria.
Abraço a todos,
John Marques
2 Comentários to “Array_diff – Diferença entre Arrays”
Responda






Muito legal sua dica do array_diff(), amigo! Mas estou com um problema um pouco diferente. Talvez, você possa me ajudar.
Tenho uma página de cadastro de usuários e estou pretendendo, para atualizar os dados do banco, colocá-los num vetor e compará-los com o vetor gerado pelo mysql.
Resumindo: Quero comparar um vetor com o outro e, caso sejam diferentes, atualizar o banco com os novos dados.
Minha dúvida é a seguinte. O que, exatamente, o array_diff() retorna quando os vetores são iguais?
Obrigado pela atenção e parabéns pelo site!
Olá Ricardo,
Então se os dois vetores forem exatamente iguais a função retorna um função vazia, exemplo:
< ?php
$a = array(0,1,2);
$b = array(0,1,2);
print_r(array_diff($a, $b));
// Resultado Array()
?>
John