لماذا لا يعمل هذا array_unique كما هو متوقع؟
-
27-09-2019 - |
سؤال
هل يمكن لأي شخص أن يخبرني لماذا لا يعمل هذا كما هو متوقع؟
<?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 />';
}
لا تنتمي إلى StackOverflow