Pergunta

Alguém pode me dizer por que isso não funciona como esperado?

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

Os resultados que obtive é:

Woolovers
Roxio

BandQ


Big Bathroom Shop

Robert Dyas

Tudo que eu quero é que as duplicatas se foram: |

Foi útil?

Solução

Primeiro, você deve chamá -lo antes do loop, pois ele só precisa ser filtrado uma vez.

Segundo, as chaves são preservadas quando você usa array_unique(), então o PHP está tentando fazer um loop através de índices não existentes em sua matriz e pode perder alguns no final também porque count($merchant_array) agora retorna um valor menor. Você precisa redefinir as chaves primeiro (usando array_values()), em seguida, faça um loop.

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

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

Como alternativa, use um loop foreach para pular o array_values() ligar:

  $merchant_array = array_unique($merchant_array);

  foreach ($merchant_array as $merchant) {
        echo $merchant . '<br />';
  }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top