array_udiff Computa a diferença de arrays usando uma função de callback para comparação dos dados &reftitle.description; arrayarray_udiff arrayarray arrayarrays callablevalue_compare_func Computa a diferença de arrays usando uma função de callback para comparação dos dados. Esta é contrária a array_diff que usa uma função interna para comparar os dados. &reftitle.parameters; array O primeiro array. arrays Arrays para comparar. value_compare_func &sort.callback.description; &sort.callback.description.presort; &reftitle.returnvalues; Retorna um array contendo todos os valores de array que não estão presentes em qualquer dos outros argumentos. &reftitle.examples; Exemplo de <function>array_udiff</function> usando Objetos stdClass largura = 11; $array1[0]->altura = 3; $array1[1]->largura = 7; $array1[1]->altura = 1; $array1[2]->largura = 2; $array1[2]->altura = 9; $array1[3]->largura = 5; $array1[3]->altura = 7; $array2[0]->largura = 7; $array2[0]->altura = 5; $array2[1]->largura = 9; $array2[1]->altura = 2; function comparar_por_area($a, $b) { $areaA = $a->largura * $a->altura; $areaB = $b->largura * $b->altura; if ($areaA < $areaB) { return -1; } elseif ($areaA > $areaB) { return 1; } else { return 0; } } print_r(array_udiff($array1, $array2, 'comparar_por_area')); ?> ]]> &example.outputs; stdClass Object ( [largura] => 11 [altura] => 3 ) [1] => stdClass Object ( [largura] => 7 [altura] => 1 ) ) ]]> Exemplo de <function>array_udiff</function> usando Objetos DateTime modify('Monday this week midnight'); $fim = clone $inicio; $fim->modify('Friday this week midnight'); $intervalo = new DateInterval('P1D'); foreach (new DatePeriod($inicio, $intervalo, $fim) as $tempoLivre) { $this->livres[] = $tempoLivre; } } public function marcarCompromisso(DateTime $data, $nota) { $this->reservadas[] = array('data' => $data->modify('midnight'), 'nota' => $nota); } public function checarDisponibilidade() { return array_udiff($this->livres, $this->reservadas, array($this, 'compararPersonalizado')); } public function compararPersonalizado($livres, $reservadas) { if (is_array($livres)) $a = $livres['data']; else $a = $livres; if (is_array($reservadas)) $b = $reservadas['data']; else $b = $reservadas; if ($a == $b) { return 0; } elseif ($a > $b) { return 1; } else { return -1; } } } // Cria um calendário para compromissos semanais $meuCalendario = new MeuCalendario; // Marca alguns compromissos para esta semana $meuCalendario->marcarCompromisso(new DateTime('Monday this week'), "Limpando apartamento do GoogleGuy."); $meuCalendario->marcarCompromisso(new DateTime('Wednesday this week'), "Fazendo uma viagem de snowboarding."); $meuCalendario->marcarCompromisso(new DateTime('Friday this week'), "Corrigindo código bugado."); // Checar disponibilidade de dias comparando datas $reservadas com datas $livres echo "Estou disponível nos seguintes dias desta semana...\n\n"; foreach ($meuCalendario->checarDisponibilidade() as $livre) { echo $livre->format('l'), "\n"; } echo "\n\n"; echo "Estou ocupado(a) nos seguintes dias desta semana...\n\n"; foreach ($meuCalendario->reservadas as $reservada) { echo $reservada['data']->format('l'), ": ", $reservada['nota'], "\n"; } ?> ]]> &example.outputs; &reftitle.notes; Observe que esta função verifica somente uma dimensão de um array n-dimensional. É claro que dimensões mais profundas podem ser verificadas usando array_udiff($array1[0], $array2[0], "func_compara_dados");. &reftitle.seealso; array_diff array_diff_assoc array_diff_uassoc array_udiff_assoc array_udiff_uassoc array_intersect array_intersect_assoc array_uintersect array_uintersect_assoc array_uintersect_uassoc