سؤال

هل يمكن لأي شخص أن يخبرني لماذا لا يعمل هذا كما هو متوقع؟

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