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

مساعدة البحث عن طريق المصفوفات

بدأه etri في 29 يونيو 2011 · 12 رد · 838 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إخواني أعضاء هذا المنتدى السلام عليكم

الرجاء في مساعدتي في البحث عن كلمة أو نص مشابه موجودة في مصفوفة واستخراج نتائج البحث ، وهذا بعد إدخال المستخدم كلمة البحث في نموذج البحث ، حيث إذا أدخل المستخدم كلمة صلاة تظهر العناصر التي فيها صلاة مع كامل الجملة أي مثالنا هذا يظهر : صلاة العيد ، الصلاة في رمضان ، درس في صلاة الصبح

 <body>
   <form method="post" action="cherche.php">
   <input type="text" name="text" size="20">
   <input type="submit" value="بحث" name="send">
   </form>  
</body>

 <?php
    $coordonnees= array(
  'صلاة العيد '=>1,
  'الصلاة في رمضان'=>2,
  'الصوم في رمضان'=>3,
  'درس في صلاة الصبح'=>4,
  'الدرس الخامس'=>5,

    ) ;

    for($n=1;$i<=count($coordonnees);$i++)  
  if (array_key_exists('$text', $coordonnees))
  {

       echo $text."<br />" ;    
}
?>[attachment=118898:cherch.rar]

cherch.rar

#2

السلام عليكم..

استبدل كود PHP بالكود التالي:

<?php $array=array('صلاة العيد ','الصلاة في رمضان','الصوم في رمضان','درس في صلاة الصبح','الدرس الخامس','صلاة');
$loop=count($array); $x=0;
while($x < $loop){if(strpos($array[$x],$_POST['text']) !== False) echo $array[$x].'<br />'; $x++;}
?>

أتمنى أن يعمل معك الكود بالشكل المطلوب..

شكرًا

تم تعديل هذه المشاركة بواسطة sitesmaker في 29 يونيو 2011 في 23:13

1
#3

شكرا لك الرد السريع ، لقد اشتغلت تقريبا بالشكل المطلوب لكن لاحظ أني وضعت مصفوفة حرفية حيث أن الفهرسة تمثل عنوان الدرس والعنصر يمثل الرقم فإذا كانت على ذلك النحو فالكود لا يشتغل مع الرجاء أن تشرح عمل الدالة strpos

  $array=array('صلاة العيد '=>1,'الصلاة في رمضان'=>2,'الصوم في رمضان'=>3,'درس في صلاة الصبح'=>4,'الدرس الخامس','صلاة'=>5);
#4

أولاً، هل عمل معك الكود قبل التعديل؟

نقطة أخرى، عناصر المصفوفات الرقمية تبدأ بالصفر في PHP، و الكود لن يعمل بالشكل المطلوب إلا بمصفوفات أول عنصر فيها هو الصفر! إذا أردت أن تبدأ من 1، اضبط المتغير x للقيمة 1 و اجعل شرط الـwhile أن loop أكبر من أو يساوي x..

و نأتي للسؤال، strpos هي دالة PHP، تستخدم لإحضار موقع نص فرعي داخل النص الأساسي، لكن يمكن أن تستخدم، لنرى إذا وجد نص فرعي في نص أساسي! لذلك استخدمتها بدلاً من استخدام شيء آخر مثل دالة preg_replace أو فكرة غريبة زارت رأسي عندما رأيت السؤال، بأن أرى إذا عملنا str_replace لكلمة "صلاة" من النص و كان بعد هذا الاستبدال مازال يساوي نفس القيمة، إذن هذا النص لا يحتوي على القيمة "صلاة"..

1
#5

بالنسبة للنقطة الأولى لقد عمل مع الكود بعد التعديل فبتلك الطريقة يعمل الكود بشكل جيد إذا كانت المصفوفة رقمية

أما النقطة الثانية لاحظ اني أريد مصفوفة حرفية وليست رقمية ، فتلك الأرقام 1،2،3 .. يمكن ان تكون أسماء لملفات مثلا

تم تعديل هذه المشاركة بواسطة Xacker في 30 يونيو 2011 في 02:52

#6

جيد، هل يمكن أن تضع المصفوفة كما تريد، ثم يحولها الكود إلى مصفوفة رقمية و يكمل؟

#7
sitesmaker كتب:

جيد، هل يمكن أن تضع المصفوفة كما تريد، ثم يحولها الكود إلى مصفوفة رقمية و يكمل؟

أعذرني في الحقيقة لم أفهم السؤوال :huh:

#8

الآن أنت تريد مصفوفة مفاتيح عناصرها كلمات أو أسماء ملفات أو أشياء كهذه، صحيح؟ جيد.

أتمنى أن يكون الكود التالي كافيًا:

<?php
$array=array();
$array['abc']='صلاة';
$array['21']='الدرس الخامس';
$array['index.php']='درس في صلاة الصبح';
$array['random']='الصوم في رمضان';
$array['yes3']='الصلاة في رمضان';
$array['x']='صلاة العيد';

$loop=count($array);
while($loop){$current=current($array);
if(strpos($current,$_POST['text'])!==False) echo $current.'<br />';
next($array); $loop--;
}
?>

يعمل بترتيب المصفوفة دون أي تغيير..

تمت تجربته و يعمل بالشكل المطلوب، على أن كلمة "صلاة" موجودة في محتوى (قيمة) العنصر لا مفتاح العنصر..

#9

بدل من إستخدام while أو for

إستخدم foreach

<?php
	$coordonnees= array(
    	'صلاة العيد '=>1,
    	'الصلاة في رمضان'=>2,
    	'الصوم في رمضان'=>3,
    	'درس في صلاة الصبح'=>4,
    	'الدرس الخامس'=>5);
	foreach ($coordonnees as $key=>$val){
    	// Search in keys
    	if (strpos($key, $_POST['text'])){
        	// Value Found
        	print("Value : $val<br />");
    	}
    	// Search in values
    	if (strpos($val, $_POST['text'])){
        	// Key Found
        	print("Key : $key<br />");
    	}
	}
?>
1
#10
عبد المنعم بن حورية كتب:

بدل من إستخدام while أو for

إستخدم foreach

<?php
	$coordonnees= array(
    	'صلاة العيد '=>1,
    	'الصلاة في رمضان'=>2,
    	'الصوم في رمضان'=>3,
    	'درس في صلاة الصبح'=>4,
    	'الدرس الخامس'=>5);
	foreach ($coordonnees as $key=>$val){
    	// Search in keys
    	if (strpos($key, $_POST['text'])){
        	// Value Found
        	print("Value : $val<br />");
    	}
    	// Search in values
    	if (strpos($val, $_POST['text'])){
        	// Key Found
        	print("Key : $key<br />");
    	}
	}
?>

شكرا لك أخي تقريببا هذا الذي أريده لكن لا تظهر كل العناصر فقط العنصر الثاني و العنصر الرابع

#11

شكرا لكم لقد وجدت الحل وهو إضافة ضافة جملة for

 <?php 
 $array= array(
        'صلاة العيد '=>1,
        'الصلاة في رمضان'=>2,
        'الصوم في رمضان'=>3,
        'درس في صلاة الصبح'=>4,
        'الدرس الخامس'=>5);
       for($n=1;$n<=count($array);$n++){
     foreach ($array as $x=>$n){


    if (strpos($x, $_POST['text'])!== False)
    echo $x.'<br />';
    }}
#12
etri كتب:

شكرا لكم لقد وجدت الحل وهو إضافة ضافة جملة for

 <?php 
 $array= array(
        'صلاة العيد '=>1,
        'الصلاة في رمضان'=>2,
        'الصوم في رمضان'=>3,
        'درس في صلاة الصبح'=>4,
        'الدرس الخامس'=>5);
       for($n=1;$n<=count($array);$n++){
     foreach ($array as $x=>$n){


    if (strpos($x, $_POST['text'])!== False)
    echo $x.'<br />';
    }}

اسمحوني لقد تسرعت ، يمكن أن يكون الحل بدون إضافة جملة for فجملة foreach تكفي لكن يجب إضافة !== False إلى الشرط if يوكون الكود على الشكل التالي:

 $array= array(
        'صلاة العيد '=>1,
        'الصلاة في رمضان'=>2,
        'الصوم في رمضان'=>3,
        'درس في صلاة الصبح'=>4,
        'الدرس الخامس'=>5);

     foreach ($array as $x=>$n){   
    if (strpos($x, $_POST['text'])!== False)
    echo $x.'<br />';
    }

:)

#13

لا تنسى الترشيح والتقييم هههه

1

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