Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

389
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda