Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

382
Visualizações
¿Cuál es el equivalente php de Reduce en javascript para filtrar las entradas duplicadas en Array?

Estoy filtrando una matriz que tiene el mismo valor para la clave, por ejemplo, Javascript

 var sims = [{icon:"sim"},{icon:"airtime"},{icon:"sim"}] sims.reduce((a,v)=>{ var exists = a.some((i)=>{ return i.icon == v.icon }) if(!exists){ a.push(v); } return a },[])

Entonces, el código anterior funciona perfectamente bien y obtuve resultados Salida de código javascript

Pero no puedo hacer lo mismo en php. He usado la función php array_reduce pero no puedo entender su funcionamiento porque estoy más desconcertado con su sintaxis.

Esto es lo que probé Php

 <?php $cars = array(array("icon"=>'sim'),array("icon"=>'airtime'),array("icon"=>'sim')); $container = array(); $unique_types = array_unique(array_map(function($elem){return $elem['icon'];}, $cars)); echo json_encode($unique_types); ?>

Lo que me da salida

 ["sim","airtime"]

Me está dando elementos únicos que quiero pero no me devuelve el objeto completo como en Javascript. ¿Qué me estoy perdiendo?

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Puede lograr esto de varias maneras, ya que su matriz nunca cambia, puede usar el indicador SORT_REGULAR para comparar elementos normalmente .

 // [{"icon":"sim"},{"icon":"airtime"}] echo json_encode(array_unique($cars, SORT_REGULAR));

Esto se menciona en la documentación bajo "BANDERAS".


Lo anterior solo comparará que toda la matriz es la misma . Si su matriz se hace más grande, es posible que desee que solo sea única en función de la clave del icon .

 // [{"icon":"sim"},{"icon":"airtime"}] echo json_encode(array_intersect_key($cars, array_unique(array_column($cars, 'icon'))));

Puede leer sobre array_column y array_intersect_key . Esencialmente, array_column está haciendo su lógica array_map , que luego lo único que faltaba es mapear esas claves nuevamente.

about 4 years ago · Juan Pablo Isaza Relatório

0

Muchas maneras de hacer esto, por ejemplo, intente esto:

 $cars = array( array("icon"=>'sim'), array("icon"=>'airtime'), array("icon"=>'sim')); echo json_encode(array_map("unserialize", array_unique(array_map("serialize", $cars))));

Consulte la documentación de estas funciones, las explicaciones son bastante sencillas. Espero que esto ayude.

about 4 years ago · Juan Pablo Isaza Relatório

0

En el lugar del agujero en el idioma donde debería estar array_uunique() [nuevamente, esto nunca se implementó], puede usar una peculiaridad de las matrices asociativas de PHP para hacer cumplir la unicidad.

 $cars = array(array("icon"=>'sim'),array("icon"=>'airtime'),array("icon"=>'sim')); // duplicate indexes are overwritten $index = array_flip(array_column($cars, 'icon')); $out = []; foreach($index as $i) { $out[] = $cars[$i]; } var_dump($out);

Producción:

 array(2) { [0]=> array(1) { ["icon"]=> string(3) "sim" } [1]=> array(1) { ["icon"]=> string(7) "airtime" } }

Árbitro:

  • https://www.php.net/manual/en/function.array-flip
  • https://www.php.net/manual/en/function.array-column.php
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda