Вопрос

Кто-нибудь может сказать мне, почему это не работает должным образом?

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

Результаты, которые я получаю:

Woolovers
Roxio

BandQ


Big Bathroom Shop

Robert Dyas

Все, что я хочу, это дубликаты ушли: |

Это было полезно?

Решение

Во-первых, вы должны вызывать его перед циклом, поскольку его только необходимо отфильтроваться один раз.

Во-вторых, ключи сохраняются при использовании array_unique(), Таким образом, PHP пытается петить без более долгого - существующих индексов в вашем массиве и может пропустить некоторые в конце, потому что count($merchant_array) Теперь возвращает меньшее значение. Вам необходимо сначала сбросить ключи (используя array_values()), затем петлю его.

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

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

В качестве альтернативы, используйте петлю Foreach, чтобы пропустить array_values() вызов:

  $merchant_array = array_unique($merchant_array);

  foreach ($merchant_array as $merchant) {
        echo $merchant . '<br />';
  }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top