Pregunta

¿Alguien puede decirme por qué esto no funciona como se esperaba?

<?php
      $merchant_string = '123-Reg|Woolovers|Roxio|Roxio|BandQ|Roxio|Roxio|Big Bathroom Shop|Roxio|Robert Dyas|Roxio|Roxio|PriceMinister UK|Cheap Suites|Kaspersky|Argos|Argos|SuperFit|PriceMinister UK|Roxio|123-Reg';      

      $merchant_array = explode('|', $merchant_string); 

      for($i = 0; $i<count($merchant_array); $i++)
      {
            $merchant_array = array_unique($merchant_array);

            echo $merchant_array[$i] . '<br />';
      }
?>

Los resultados que obtengo es:

Woolovers
Roxio

BandQ


Big Bathroom Shop

Robert Dyas

Todo lo que quiero es los duplicados desaparecido: |

¿Fue útil?

Solución

En primer lugar, usted debe estar llamando antes de que el bucle ya que sólo necesita ser filtrada una vez.

En segundo lugar, las claves se conservan cuando se utiliza array_unique(), por lo que PHP está intentando colocar a través de índices que ya no existe en la matriz, y puede pasar por alto algunos al final, así porque count($merchant_array) ahora devuelve un valor menor. Es necesario para restablecer las claves primero (usando array_values()), entonces bucle.

  $merchant_array = array_values(array_unique($merchant_array));

  for($i = 0; $i<count($merchant_array); $i++)
  {
        echo $merchant_array[$i] . '<br />';
  }

Alternativamente, utilice un bucle foreach para omitir la llamada array_values():

  $merchant_array = array_unique($merchant_array);

  foreach ($merchant_array as $merchant) {
        echo $merchant . '<br />';
  }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top