Em PHP, a função array_diff_assoc() foi projetada para encontrar a diferença entre dois arrays enquanto prioriza o valor-chave pares. No entanto, ao usar esta função para filtrar linhas de uma matriz 2D com base na interseção com outra matriz 2D, ela pode nem sempre produzir os resultados esperados.
O problema surge devido a a comparação estrita realizada por array_diff_assoc(). Ele compara representações de string de pares de valores-chave durante a comparação. Isso significa que mesmo que dois pares de valores-chave contenham os mesmos valores, eles não serão considerados iguais, a menos que suas representações de string sejam idênticas.
Considere os seguintes dados de exemplo:
$array1 = [
[12 => 'new q sets'],
[11 => 'common set']
];
$array2 = [
[11 => 'common set']
];
Quando tentamos usar array_diff_assoc() para filtrar $array1 com base nas linhas em $array2, obtemos uma saída incorreta:
$output = array_diff_assoc($array1, $array2);
print_r($output);
// Output: [
// [11 => 'common set']
// ]
Esta saída mostra que a linha comum está presente no resultado, enquanto a saída pretendida deve conter a linha exclusiva de $array1.
Como mencionado anteriormente, o problema está na comparação estrita realizada por array_diff_assoc(). Ao comparar as duas matrizes a seguir:
Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )
a função retorna o par de valores-chave diferente como resultado porque os pares de valores-chave não são idênticos a strings.
Para resolver esse problema, podemos usar uma abordagem um pouco diferente que verifica a existência de valores-chave específicos nas matrizes:
$filteredRows = array_filter($array1, function($row) use ($array2) {
return !in_array($row, $array2);
});
print_r($filteredRows);
// Output: [
// [12 => 'new q sets']
// ]
Esta abordagem usa in_array() para verificar se cada linha de $array1 está presente em $array2. Se uma linha não estiver presente em $array2, ela será incluída nos resultados filtrados.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3