النتائج 1 إلى 5 من 5

الموضوع: فرز المصفوفات متعددة الابعاد

  1. #1
    عضو جديد
    تاريخ التسجيل
    Jun 2010
    المشاركات
    3

    فرز المصفوفات متعددة الابعاد



    بسم الله الرحمن الرحيم


    لم اجد اي موضوع عربي يتحدث عن فرز المصفوفات متعددة الابعاد مع ان فرز المصفوفات العادية سهل جدا مثال :


    كود PHP:
    <?php
    $price 
    = array(432,21,56,766,90);
    // let's sort the array
    sort($price);
    print 
    "<pre>";
    print_r($price);
    print 
    "</pre>";
    ?>
    و هذه هي النتيجة :

    كود PHP:
    Array
    (
        [
    0] => 21
        
    [1] => 56
        
    [2] => 90
        
    [3] => 432
        
    [4] => 766

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


    كود PHP:
     
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>اللهم علمنا ما ينفعنا</title>
    </head>
    <body>
    <pre>
    <?php
    $products 
    = array(             87898=>array('name'=>'بيبسي','price'=>15 ),
              
    8789887=>array('name'=>'كولا حجم عائلي','price'=>40 ),
              
    54354=>array('name'=>'شوكولا','price'=> 20),
              
    65985547=>array('name'=>'بسكويت','price'=> 10),
              
    3456768=>array('name'=>'شيبس','price'=>));
    function 
    price_sort($x,$y)
    {
     return (
    $x['price'] < $y['price']);
     }
     
     
    //_______________________________
     
    function name_sort($x,$y)
     {
      return 
    strcasecmp($x['name'],$y['name']);
      }
      
    //_____________________________
     
    print "  <h1>فرز حسب الاسماء    </h1>";
     
    uasort($products,'name_sort');
    print_r($products);
     
    print 
    " <h1>  والان سنقوم بفرزها حسب الاسعار تنازليا </h1>";
    uasort($products,'price_sort');
    print_r($products);
    ?>
    </pre>
    </body>
    </html>

    و عندما نقوم بتنفيذه بالمتصفح تكون النتيجة كالتالي :




    كود PHP:
     
     
      
    [b]فرز حسب الاسماء    [/b]
     
    Array(    [
    65985547] => Array        (            [name] => بسكويت            [price] => 10        )    [87898] => Array        (            [name] => بيبسي            [price] => 15        )    [54354] => Array        (            [name] => شوكولا            [price] => 20        )    [3456768] => Array        (            [name] => شيبس            [price] => 5        )    [8789887] => Array        (            [name] => كولا حجم عائلي            [price] => 40        )) [b]  والان سنقوم بفرزها حسب الاسعار تنازليا [/b]
     
    Array(    [
    8789887] => Array        (            [name] => كولا حجم عائلي            [price] => 40        )    [54354] => Array        (            [name] => شوكولا            [price] => 20        )    [87898] => Array        (            [name] => بيبسي            [price] => 15        )    [65985547] => Array        (            [name] => بسكويت            [price] => 10        )    [3456768] => Array        (            [name] => شيبس            [price] => 5        )) 

    ارجو ان اكون قد افدتكم[/

    ترقبوا المزيد من الدروس المتقدمة

    في امان الله







  2. #2
    عضو جديد
    تاريخ التسجيل
    Jun 2010
    المشاركات
    4


    شرح جميل شكرا لك اخي






  3. #3
    عضو جديد
    تاريخ التسجيل
    Jun 2010
    المشاركات
    3



    اهلا و سهلا بك اخي نورت الموضوع

    الفكرة اننا قد صنعنا فنكشن خاصة بنا لفرز المصفوفة و اي سؤال انا جاهز






  4. #4
    عضو جديد
    تاريخ التسجيل
    Jun 2010
    المشاركات
    4


    يعطيك العافية اخـوي شرح وافي سلمت يداك






  5. #5
    عضو نشيط
    تاريخ التسجيل
    Apr 2010
    المشاركات
    34


    السلام عليكم ورحمة الله و بركاته
    اخي الكريم بعد تجربة دالتك وجدت انها لا تقوم بالفرز التصاعدي لانه وببساطة ليس هناك على حد علمي خصوصا دوال المصفوفات دالة (انتبه اقصد عائلة u ) تقوم بالترتيب تصاعديا مع العلم ان هناك دالة تستطيع فعل ذلك لكنها لا تحافظ على المفاتيح لذلك حاولت ان انشيء دالة تمكنها فعل ذلك فكانت النتيجة كالتالي
    كود PHP:
    <?php
    $products 
    = array( 87898=>array('name'=>'A','price'=>15 ),
              
    8789887=>array('name'=>'E','price'=>40 ),
              
    54354=>array('name'=>'C','price'=> 20),
              
    65985547=>array('name'=>'D','price'=> 10),
              
    3456768=>array('name'=>'B','price'=>));
              
              function 
    _Sort($array$value 'name'$sort_mode SORT_ASC$sort_type SORT_REGULAR)
              {
                  
    $arr1 = array();
                  
    $arr4 = array();
                  if (
    is_array($array)) {
                      foreach (
    $array as $val) {
                          
    $arr1[] = $val[$value];
                      }
                      switch (
    $value) {
                          case 
    'name':
                              
    array_multisort($arr1$sort_mode$sort_type);
                              
    $keys array_keys($array);
                              
    $chunk array_chunk($arr11);
                              
    $ch array_chunk($array1);
                              for (
    $j 0$j count($chunk); $j++) {
                              foreach (
    $keys as $val) {
                                  if (
    in_array($arr1[$j], $array[$val])) {
                                      if (
    $ch[$j][0]['price'] == $array[$val]['price'] &&
                                           
    $array[$val] == $array[$val]['name']) {
                                          
    $arr4[$val]['name'] = $arr1[$j];
                                          
    $arr4[$val]['price'] = $ch[$j][0]['price'];
                                      }else {
                                          
    $sort[$val]['name'] = $arr1[$j];
                                          
    $sort[$val]['price'] = $array[$val]['price'];
                                      }
                                  }
                              }
                              }
                              return 
    $sort;
                              break;
                              
                          case 
    'price':
                              
    array_multisort($arr1$sort_mode$sort_type);
                              
    $keys array_keys($array);
                              
    $chunk array_chunk($arr11);
                              
    $ch array_chunk($array1);
                              for (
    $j 0$j count($chunk); $j++) {
                              foreach (
    $keys as $val) {
                                  if (
    in_array($arr1[$j], $array[$val])) {
                                      if (
    $ch[$j][0]['name'] == $array[$val]['name'] &&
                                           
    $array[$val] == $array[$val]['price']) {
                                          
    $arr4[$val]['price'] = $arr1[$j];
                                          
    $arr4[$val]['name'] = $ch[$j][0]['name'];
                                      }else {
                                          
    $sort[$val]['price'] = $arr1[$j];
                                          
    $sort[$val]['name'] = $array[$val]['name'];
                                      }
                                  }
                              }
                              }
                              return 
    $sort;
                              break;
                      }
                  }else {
                      
    trigger_error('Parametre un doit etre un tableau, Type <b>'gettype($array) .'</b> n\'est pas valid');
                  }
              }
              
    print_r(_Sort($products'price'SORT_DESC));
    ?>
    اتمنى ان اكون قد وفقت و السلام





    التعديل الأخير تم بواسطة KALAM ; 17-06-2010 الساعة 08:15 PM





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض