Domanda

Qualcuno può dirmi perché questo non funziona come previsto?

<?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 />';
      }
?>

I risultati che ottengo è:

Woolovers
Roxio

BandQ


Big Bathroom Shop

Robert Dyas

Tutto quello che voglio è i duplicati spariti: |

È stato utile?

Soluzione

In primo luogo, si dovrebbe essere chiamata prima che il ciclo dal momento che ha solo bisogno di essere filtrato una volta.

In secondo luogo, le chiavi sono conservati quando si utilizza array_unique(), quindi PHP sta tentando di collegare attraverso indici non-più-esistenti nel vostro array, e può perdere un po 'alla fine pure perché count($merchant_array) ora ritorna un valore inferiore. È necessario reimpostare le chiavi prima (utilizzando array_values()), poi loop.

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

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

In alternativa, utilizzare un ciclo foreach per saltare la chiamata array_values():

  $merchant_array = array_unique($merchant_array);

  foreach ($merchant_array as $merchant) {
        echo $merchant . '<br />';
  }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top