array_udiff_uassoc
(PHP 5, PHP 7, PHP 8)
array_udiff_uassoc — Computa a diferença entre arrays com checagem adicional de índice, compara dados e índices por uma função de callback
Descrição
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.
CautionRetornar 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
e0.1
serão convertidos para o valor inteiro0
, o que comparará esses valores como iguais.CautionA 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