4

これが期待どおりに機能しない理由を誰か教えてもらえますか?

<?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

私が欲しいのは、重複がなくなったことだけです:|

4

1 に答える 1

11

まず、一度だけフィルタリングする必要があるため、ループの前に呼び出す必要があります。

第 2 に、 を使用するとキーが保存される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 />';
  }
于 2010-11-22T02:59:02.950 に答える