Array de Objetos, função para substituir o array_diff


Tem uma coisa em JAVA que eu gosto muito, sao os ArrayList, nada mais é que arrays, porem tem muito mais métodos do que o convencional, o PHP também possui muitos métodos para array, porém o array_diff não funciona bem com array de objetos, e é interessante vc ter um array de objetos… mas enfim para contornar isso criei uma função !

Notem ele pega valores do array de objetos 1 que nao estao no array 2

/**
* $var = o atributo para comparar
*/

 function diff ($var,$array1,$array2){
 $ar_tmp1 = array();//Array temporário para trabalhar com array1
 $ar_tmp2 = array();//Array temporário para trabalhar com array2
 $ar_tmp3 = array();//Array para guardar as keys diferentes
 $ar_return = array();//Array que recoloca os objetos e retorna
 /**
  * Guardando no $ar_tmp1 os valores das keys
  * poderia usar o foreach também, mas uso o for
  * para ficar mais claro as minhas intenções
  */
 for ($i = 0;$i < count($array1);$i++){
  $ar_tmp1&#91;$i&#93; = $array1&#91;$i&#93;->$var;
 }
 /**
  * Guardando no $ar_tmp1 os valores das keys
  */
 for ($i = 0;$i <count ($array2);$i++){
  $ar_tmp2&#91;$i&#93; = $array2&#91;$i&#93;->$var;
 }
 /**
  * A mágica acontence aqui, usamos o array_values para zerar os indices
  * e depois usamos o array_diff que compara as keys, ou seja, valores do $ar_tmp1 que nao
  * estao presente no $ar_tmp2
  */
 $ar_tmp3 = array_values(array_diff($ar_tmp1,$ar_tmp2));
 /**
  * Agora que temos as keys diferentes montamos o array com os objetos
  * referentes as keys
  */
 for ($i = 0;$i < count($ar_tmp3);$i++){
   for ($j = 0; $j < count ($ar_tmp1);$j++){
    if ($array1&#91;$j&#93;->$var == $ar_tmp3[$i]){
     $ar_return[$i] = $array1[$j];
    }
   }
 }
 return $ar_return;
}
/**
 * Para testar
 */
$obj1 = new stdClass();//Classe Standart nativa do PHP
$obj1->id = 1;
$obj1->nome = 'Objeto 1';
$obj2 = new stdClass();
$obj2->id = 2;
$obj2->nome = 'Objeto 2';
$obj3 = new stdClass();
$obj3->id = 3;
$obj3->nome = 'Objeto 3';
$ar1 = array($obj1,$obj2);
$ar2 = array($obj2,$obj3);
print_r(diff('id',$ar1,$ar2));

Para quem gosta de trabalhar com array de objetos, essa seria uma boa função

Anúncios

3 comentários sobre “Array de Objetos, função para substituir o array_diff

  1. Usa assim, caso vc implemente 2 arrays de objetos, e vc queira ver quais elementos do array1 que nao estao presente no array2, em arrays comuns o array_diff serve, mas para array de objetos nao funciona !
    O uso que estou fazendo é o seguinte, no portal eu coleto todas as matérias que podem ir para o ar num array e no outro as materias que efetivamente estao no ar, dou o diff neles e vejo qual que não foi !
    Respondido e entendido !?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s