array_udiff_uassoc

(PHP 5, PHP 7, PHP 8)

array_udiff_uassocComputa a diferença entre arrays com checagem adicional de índice, compara dados e índices por uma função de callback

Descrição

array_udiff_uassoc(
    array $array,
    array ...$arrays,
    callable $value_compare_func,
    callable $key_compare_func
): array

Computa a diferença entre arrays com checagem adicional de índice, compara dados e índices por uma função de callback.

Note que as chaves são usadas na comparação, ao contrário de array_diff() e array_udiff().

Parâmetros

array

O primeiro array.

arrays

Arrays para comparar.

value_compare_func

A função de comparação deve retornar um inteiro menor que, igual ou maior que zero se o primeiro argumento for considerado respectivamente menor que, igual ou maior que o segundo.

callback(mixed $a, mixed $b): int
Caution

Retornar valores não inteiros da função de comparação, como float, resultará em uma conversão interna do valor retornado da função callback para int. Portanto, valores como 0.99 e 0.1 serão convertidos para o valor inteiro 0, o que comparará esses valores como iguais.

Caution

A função chamada de ordenação deve lidar com qualquer valor de qualquer array em qualquer ordem, independentemente da ordem em que eles foram originalmente fornecidos. O motivo é que cada array individual é primeiramente ordenado antes de ser comparado com outros arrays. Por exemplo:

<?php
$arrayA = ["string", 1];
$arrayB = [["value" => 1]];
// $item1 e $item2 podem ser "string", 1 ou ["value" => 1]
$compareFunc = static function ($item1, $item2) {
    $value1 = is_string($item1) ? strlen($item1) : (is_array($item1) ? $item1["value"] : $item1);
    $value2 = is_string($item2) ? strlen($item2) : (is_array($item2) ? $item2["value"] : $item2);
    return $value1 <=> $value2;
};
?>
key_compare_func

A comparação das chaves (índices) é feita também por função de callback: key_compare_func. Este comportamento é contrário ao que array_udiff_assoc() faz, já que esta compara os índices usando uma função interna.

Valor Retornado

Retorna um array contendo todos os valores de array que não estão presentes em qualquer dos outros argumentos.

Exemplos

Example #1 Exemplo de array_udiff_uassoc()

<?php
class cr {
    private $priv_member;
    function __construct($val)
    {
        $this->priv_member = $val;
    }

    static function comp_func_cr($a, $b)
    {
        if ($a->priv_member === $b->priv_member) return 0;
        return ($a->priv_member > $b->priv_member)? 1:-1;
    }

    static function comp_func_key($a, $b)
    {
        if ($a === $b) return 0;
        return ($a > $b)? 1:-1;
    }
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);

$result = array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), array("cr", "comp_func_key"));
print_r($result);
?>

O exemplo acima produzirá:

Array
(
    [0.1] => cr Object
        (
            [priv_member:private] => 9
        )

    [0.5] => cr Object
        (
            [priv_member:private] => 12
        )

    [0] => cr Object
        (
            [priv_member:private] => 23
        )
)

Em nosso exemplo acima é possível ver que o par "1" => new cr(4) está presente em ambos os arrays e assim não está na saída da função. Mantenha em mente que duas funções de retorno devem ser fornecidas.

Notas

Note: Observe que esta função somente verifica uma dimensão de um array n-dimensional. É claro que dimensões mais profundas podem ser verificadas usando, por exemplo, array_udiff_uassoc($array1[0], $array2[0], "func_compara_dados", "func_compara_chave");.

Veja Também

  • array_diff() - Computa as diferenças entre arrays
  • array_diff_assoc() - Computa a diferença entre arrays com checagem adicional de índice
  • array_udiff() - Computa a diferença de arrays usando uma função de callback para comparação dos dados
  • array_udiff_assoc() - Computa a diferença entre arrays com verificação adicional de índice, comparando dados por uma função de retorno
  • array_intersect() - Calcula a interseção entre arrays
  • array_intersect_assoc() - Computa a interseção de arrays com uma adicional verificação de índice
  • array_uintersect() - Computa a interseção de array, comparando dados com uma função callback
  • array_uintersect_assoc() - Computa a interseção de arrays com checagem adicional de índice, compara os dados utilizando uma função de callback
  • array_uintersect_uassoc() - Computa a interseção de arrays com checagem adicional de índice, compara os dados e os índices utilizando funções de callback separadas