Ir para conteúdo

POWERED BY:

Arquivado

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

Gabriel Jacinto

[Resolvido] Juntar arrays com campos comuns

Recommended Posts

Bom, eu gostaria de juntar os campos de dois arrays cujos índices são iguais.

Exemplo:

Tenho esse array:

Array
(
   [email] => gamjj74@hotmail.com
   [idade] => 13
   [nome] => Gabriel
   [site] => http://...
   [cidade] => cidade tal ...
)

e esse:

Array
(
   [0] => email
   [1] => nome
)

gostaria de criar arrays, assim:

Array
(
   [email] => gamjj74@hotmail.com
   [nome] => Gabriel
)

com os campos comuns nos dois.

Juro, não sei como fazer isso :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

não tem campos em comum ai..

 

o primeiro array tem os índices: email, idade, nome, site, cidade. Com os valores: gamjj74@hotmail.com, 13, Gabriel, http://..., cidade tal...

 

o segundo array tem os índices: 0, 1. com os valores:email, nome.

 

índice é diferente de valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

use essa lógica:

<?php

$array1 = array(
 "email" => "gamjj74@hotmail.com",
 "idade" => "13",
 "nome" => "Gabriel",
 "site" => "http://...",
 "cidade" => "cidade tal ..."
);

$array2 = array(
 0 => "email",
 1 => "nome",
);

foreach($array1 as $ch1 => $vl1){
 foreach($array2 as $ch2 => $vl2){
   if($ch1 == $vl2){
     $array3[$ch1] = $vl1;
   }
 }
}

print_r($array3);

?>

 

resultado da lógica acima:

Array ( => gamjj74@hotmail.com [nome] => Gabriel )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que tal sermos mais eficientes?

 

array_intersect_key( $array1, array_flip( $array2 ) );

Primeiro invertemos as chaves com os valores do segundo array e depois fazemos uma interseção pelas chaves.

 

Como apenas os índices email e nome estão presentes como índices em ambos os arrays, o retorno é como esperado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius Rangel,

sim, claro, mas tipo, pra verificar depois colocando um array_keys no primeiro pra fazer a comparação.

 

Agora vou dar uma olhada nas respostas.

 

Bruno, obrigado :) usei e realmente funcionou.

Dárcio Gomes, obrigado também :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora eu descobri que é quase isso que eu preciso :/

Eu precisaria sim de um array com esse campos, mas dessa forma:

Array
(
   [0] => Array
       (
           [nome] => Gabriel
       )

   [1] => Array
       (
           [email] => gamjj74@hotmail.com
       )

)

Desculpa estar exendo o saco de novo hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado :)

Fiz assim e funcionou! Não sou muito bom com arrays, mas é o que eu preciso...

$ar3 = array_intersect_key( $ar1 , array_flip( $ar2 ) );//$ar1, $ar2 e $ar3 só de exemplo
print_r( array_chunk( $ar3, 1, true ) );

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.