abr201027

2

Array_diff – Diferença entre Arrays

Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

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


Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

2 Comentários to “Array_diff – Diferença entre Arrays”

  1. Ricardo 24 agosto 2010 at 8:56 #

    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!

  2. John Marques 24 agosto 2010 at 9:20 #

    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


Responda