الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف امسح عنصر متكرر في ال Array ؟؟؟؟

مغلق
بدأه rsk في 18 يوليو 2007 · 10 رد · 1,042 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،

أنا أود الإستفسار عن طريقة مسح عنصر متكرر في ال array فقد جربت array_unique و لكن أعطاني نتائج غير صحيحة :wacko: :

مثلا في هذا المثال البسيط:

<?php
$articles[0] = array (

"articleId" => '1',

"title" => 'abu Dhabi',

"summary" => 'capital'

);

$articles[1] = array (

"articleId" => '3',

"title" => 'dubai',

"summary" => 'nice city'

);

$articles[2] = array (

"articleId" => '1',

"title" => 'abu Dhabi',

"summary" => 'capital'

);
$articles = array_unique($articles);
foreach($articles as $k=>$f )
{
echo $articles[$k][articleId].'<br>';
echo $articles[$k][title].'<br>';
echo $articles[$k][summary].'<br>';
}
?>

أعطتني النتيجة التالية :

1

abu Dhabi

capital

وأنا أريدها أن تعطيني النتيجة التالية:

1

abu Dhabi

capital

3

dubai

nice city

أما إذا أزلت array_unique فإنه يعطي نتائج مكررة و هو ما لاااااااا أريده :

1

abu Dhabi

capital

3

dubai

nice city

1

abu Dhabi

capital

فما الحل، أرجووووووووووووووووو المساعدة

و شكرا كثييرا :rolleyes:

#2

أنت تستخدم مصفوفة ملتي دايمنشن فبما أن array_unique تقوم بمسح داخل مصفوفة واحدة فأعتقد لابد من الالتفاف حولها وخداعها بهذا الشكل:

for($i = 0; $i < count($articles); $i++) {
	$compare[] = $articles[$i]['articleId'];
	$result = array_unique($compare);

	if($result[$i] == $articles[$i]['articleId']) {
		echo $articles[$i][articleId].'<br>';
		echo $articles[$i][title].'<br>';
		echo $articles[$i][summary].'<br>';
	}
}

جرب هذا الكود وسوف يعطيك النتيجة بناءا على articleId لو تريد المقارنة بمفتاح آخر فغير إلى title أو summary

بالتوفيق

sign3.jpg
#3

شكرا عبدالله عياش

ولكن عندما أقوم بتكبير array و استخدام الطريقة التي ذكرتها فإنها تعطيني بعض النتائج المكررة

فمثلا :

<?php
$articles[0] = array (

"articleId" => '1',

"title" => 'abu Dhabi',

"summary" => 'capital'

);

$articles[1] = array (

"articleId" => '3',

"title" => 'dubai',

"summary" => 'nice city'

);

$articles[2] = array (

"articleId" => '1',

"title" => 'abu Dhabi',

"summary" => 'capital'

);

$articles[3] = array (

"articleId" => '1',

"title" => 'abu Dhabi',

"summary" => 'capital'

);

$articles[4] = array (

"articleId" => '3',

"title" => 'dubai',

"summary" => 'nice city'

);
for($i = 0; $i < count($articles); $i++) {
	$compare[] = $articles[$i]['articleId'];
	$result = array_unique($compare);

	if($result[$i] == $articles[$i]['articleId']) {
		echo $articles[$i][articleId].'<br>';
		echo $articles[$i][title].'<br>';
		echo $articles[$i][summary].'<br>';
	}
}
?>

يعطيني النتيجة التالية :

1

abu Dhabi

capital

3

dubai

nice city

3

dubai

nice city

وأنا أريده أن يعطيني النتيجة التالية :

1

abu Dhabi

capital

3

dubai

nice city

أرجو المساعدة و شكرا

#4

استخدمت نفس المثال اللذي وضعته هنا في ردك الثاني وأعطاني النتيجة المطلوبة تماما:

1

abu Dhabi

capital

3

dubai

nice city

أكثر من ذلك، استخدمت أمثلة أكثر وأكثر ودائما يعطيني النتيجة المطلوبة

أرجو أن تتأكد

بالتوفيق

sign3.jpg
#5

أنا جدا مقتنعة بطريقتك وقمت مرارا بعمل tracing على الورق و المفروض أن يعطي نتائج صحيحة

و لكن لا أعرف لملذا يعطي نتائج مكررة عندما تصبح قيمة i$ أربعة أو أكثر !!

سأقوم بالتأكد للمرة المليون :blink:

شكراااااااا

#6

أخ عياش، هل أنت متأكد بأنك قمت باستخدام المثال الثاني بالزبط من غير أية تغيرات و لو بسيطة ؟؟ :huh:

#7

أعتقد أن المشكلة تكمن في أن result$ يقوم بتخزين القيم حسبما كانت قيمة i$

حيث أنني أضفت

print_r( $result);

وكانت النتيجة كالتالي:

Array ( [3] => 1 [4] => 3 )
#8

نسخت المثال اللذي أوردتموه وألصقته في ملف التجربة عندي مثل ما هو تماما وأعطاني النتيجة المطلوبة

ثم أضفت 5 مصفوفات مختلفة ومكررة وفي كل مرة يعطيني المطلوب 100%

كإضافة ممكن تساعد ربما في حل الإشكال، هي قيمة المتغير articleId، انتم تضعونها بين ' ' وهذا يعني أنه يعاملها كـ string وليس int. جربوا أن تضعوا الأرقام بدون ' '

كذلك في علامة الشرط if أضيفوا علامة = لتصبح:

if($result[$i] === $articles[$i]['articleId']) {

جربوا وأخبرونا

بالتوفيق

sign3.jpg
#9
rsk كتب:
أعتقد أن المشكلة تكمن في أن result$ يقوم بتخزين القيم حسبما كانت قيمة i$

حيث أنني أضفت

print_r( $result);

وكانت النتيجة كالتالي:

Array ( [3] => 1 [4] => 3 )

بناءا على هذه النتيجة فهو بالفعل سيخرج الشيء المطلوب من المثال

أي:

1

abu Dhabi

capital

3

dubai

nice city

sign3.jpg
#10

الحمدلله لقد توصلت أخيرا للحل وهو كالتالي:

for($i = 0; $i < count($articles); $i++) 
{
	$compare[] = $articles[$i]['articleId'];
	$result = array_unique($compare);
}

for($j = 0; $j < count($articles); $j++) 
{  
   if($result[$j] == $articles[$j]['articleId']) 
   {
	  echo $articles[$j][articleId].'<br>';
	  echo $articles[$j][title].'<br>';
	  echo $articles[$j][summary].'<br>';
   }
}

شكرا أخ عبدالله عياش

#11

لا شكر على واجب

أتمنى لكم التوفيق

sign3.jpg

هذا الموضوع مغلق.

مواضيع مشابهة