Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Developer93

array_unique não cooerente

Recommended Posts

Olá, fiz uma associação de valores em um array com array_unique e o retorno da aplicação não está de acordo com as definições no manual php. Alguem pode me ajudar?

var_dump($meu_array); Resultado Array(    [0] => Array        (            [dia] => 1            [periodos] => 2            [dia_do_mes] => 07        )    [1] => Array        (            [dia] => 1            [periodos] => 2            [dia_do_mes] => 14        )    [2] => Array        (            [dia] => 1            [periodos] => 2            [dia_do_mes] => 07        )    [3] => Array        (            [dia] => 1            [periodos] => 2            [dia_do_mes] => 14        ))

$meu_array = array_unique($meu_array);

var_dump($meu_array);

Resultado

Array (   [0] => Array       (          [dia] => 1           [periodos] => 2           [dia_do_mes] => 07       ) )

Valeus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi, primeiro vc declarou o seu array ai fez um var_dum ele respondeu corretamente seu array?

no segundo vc deu um array_unique e ele eliminou os arrays internos repetidos, só não está mostrando o array

(
[dia] => 1
[periodos] => 2
[dia_do_mes] => 14
)

isso? Ou você se confundiu no uso de array_unique e var_dump?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o meu array $meu_array, deveria ficar (o que eu gostaria de ter como retorno) particionado em dois elementos:

[0] => Array
(
[dia] => 1
[periodos] => 2
[dia_do_mes] => 07
)

[1] => Array
(
[dia] => 1
[periodos] => 2
[dia_do_mes] => 14
)

 

Pois eu unifiquei os elementos usando array_unique. Entretanto, ele só unifica o primeiro elemento com o 3. Eliminando o outro que elemento. Se o array_unique não traz o que preciso, que outra função poderia usar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso está na definição de array_unique. Mas vamos por passos para entender:

array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )


Há um segundo parâmetro chamado $sort_flags (com parâmetro default SORT_STRING)

SORT_STRING - compare items as strings


e uma nota abaixo:

Note: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2 i.e. when the string representation is the same, the first element will be used.


Ou seja, é a mesma coisa que:

(string)$meu_array[0] = (string)$meu_array[1]; 

É ai que está o problema, todo array transformado em string retorna o mesmo valor:

'Array'

Por isso, todos os seus arrays são considerados iguais.

Para resolver esse problema, você deve alterar a flag de SORT_STRING para SORT_REGULAR:

SORT_REGULAR - compare items normally (don't change types)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.