صفحة 1 من 12 12345611 ... الأخيرةالأخيرة
النتائج 1 إلى 15 من 178

الموضوع: محاكاة دوال PHP

  1. #1
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647

    محاكاة دوال PHP



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

    الحمدلله، والصلاة والسلام على خير خلق الله، سيدنا محمد، وعلى آله وصحبه ومن والاه، وبعد؛

    إخوتي روّاد قسم PHP ، أود أن أطرح فكرة بسيطة وجميلة في نفس الوقت، تفيد المبتدئين في فهم اللغة، وكذلك تقوّي المتمكنين على كتابة أكواد الـ PHP المتعمقة في اللغة ..

    الفكرة في محاكاة دوال الـ PHP الموجودة في بنية اللغة Built In .. أي أننا نطرح اسم الدالة ونعيد كتابة وظيفتها كاملة ..

    وكي تتضح الفكرة أكثر لمن لم يفهمها .. سنطرح مثلاً تعبير echo فيكون المحاكي له:
    كود PHP:
    function echo_sim($var) {
          print 
    $var;

    طبعاً الفكرة ليست في هذه الدوال البسيطة لكن هذا حتى يتضح ما أقصده بالـ " محاكاة " .. أي إعادة كتابة وظيفة الدالة من الصفر ..

    دعونا نبدأ بدالة دالة وستكون آلية العمل أن يطرح أحدنا اسم دالة ونقوم جميعاً بمحاكاتها ، وتعديل الأكواد جماعياً هنا حتى نصل إلى دالة تعمل عمل الدالة الأصلية 100٪ .. ونتفق على ذلك، ثم نطرح اسم دالة أخرى لنحاكيها معاً مرة أخرى ..

    أي أننا لن ننتقل إلى دالة أخرى إلا بعد أن نتفق على محاكاة الدالة السابقة، لأغراض التنظيم ..

    أتمنى الالتزام في إطار الموضوع .. وبجدية النقاش والكتابة والتنظيم ..

    سنبدأ بمحاكاة دالة بسيطة وهي trim ، طبعاً وظيفة الدالة بشكل عام إزالة الفراغات البيضاء من بداية ونهاية البيانات النصية .. http://www.php.net/trim
    المطلوب إتمام الوظيفة كاملة كما تنفذها الدالة ..

    تحياتي، أشرف السمهوري





    __________________
    # اتبعني على Twitter
    # عِرفان ساهم ببناء المحتوى العربي العلمي على الإنترنت!


  2. #2


    trim لها وظيفة اخري
    فهل تريد فقط حذف الفراغات ؟





    __________________
    السيف أصدق أنباء من الكتب

  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    فكرة جميلة ..

    ممكن بهذا الشكل؟
    كود PHP:
    function _trim($input,$charlist=''){
        return 
    preg_replace("/^[\s$charlist]+/is",'',preg_replace("/[\s$charlist]+$/is",'',$input));
    }

    $output _trim('     Hello world    ');
    var_dump($output);
    echo 
    "\n";

    $output _trim('     Hello world    ','hd');
    var_dump($output);
    echo 
    "\n";

    // trim() doesn't support arrays
    $output _trim(array('     Hello world    ','     Hello world    '));
    var_dump($output); 






    __________________
    محمد حمود.

  4. #4
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    الدالة السابقة تحذف الرموز الغير مطبوعة أيضا لكن trim لا تحذفها

    تعديل
    كود PHP:
    function _trim($input,$charlist=''){
        return 
    preg_replace("/^[ \t\r\n\\0\x0B$charlist]+/i",'',preg_replace("/[ \t\r\n\\0\x0B$charlist]+$/i",'',$input));

    ولدعم utf-8
    كود PHP:
    function _trim($input,$charlist=''){
        return 
    preg_replace("/^[ \t\r\n\\0\x0B$charlist]+/iu",'',preg_replace("/[ \t\r\n\\0\x0B$charlist]+$/iu",'',$input));







    التعديل الأخير تم بواسطة mr_m ; 24-05-2009 الساعة 07:22 AM
    __________________
    محمد حمود.

  5. #5
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    المجروح، المقصود إتمام وظيفة الدالة بشكل تام كما هي في المانيوال ..لذلك وضعت رابط الصفحة من المانيوال ..

    mr_m، ممتاز جداً .. أعتقد أن الدالة التي كتبتها ستتم وظيفة trim على أكمل وجه ، هل بقي شيء؟

    أعتقد أننا أتممنا دالة trim هكذا .. ما رأيكم أن ننتقل إلى دالة implode ؟

    أنتظر محاولاتكم في دالة implode وسأعود لأحاول في تطويرها معكم إن شاء الله ..

    تحياتي، أشرف السمهوري





    __________________
    # اتبعني على Twitter
    # عِرفان ساهم ببناء المحتوى العربي العلمي على الإنترنت!

  6. #6
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2008
    المشاركات
    555


    المجروح، المقصود إتمام وظيفة الدالة بشكل تام كما هي في المانيوال ..لذلك وضعت رابط الصفحة من المانيوال ..

    mr_m، ممتاز جداً .. أعتقد أن الدالة التي كتبتها ستتم وظيفة trim على أكمل وجه ، هل بقي شيء؟

    أعتقد أننا أتممنا دالة trim هكذا .. ما رأيكم أن ننتقل إلى دالة implode ؟

    أنتظر محاولاتكم في دالة implode وسأعود لأحاول في تطويرها معكم إن شاء الله ..

    تحياتي، أشرف السمهوري
    محاولة سريعة ولكنها لا تنفع الا مع الدوال الرقمية

    كود PHP:
    function implode_fun($statement,$array){
    $i=0;
    $return="";
    while(
    $i<count($array)){
    if((
    $i+1) != count($array)){
    $return.=$array[$i]."$statement";
    }
    else{
    $return.=$array[$i];
    }
    $i++;
    }
    return 
    $return;
    }
    $varss=array(6,2,5,8,6,9,9,6,6,66,6);
    echo 
    implode_fun(",",$varss); 






    __________________
    مدونتي قريبا

    بيع ar-ci.com

  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2008
    المشاركات
    438


    كود PHP:
    function implode_sim($string$array) {
            
    $str '';
            foreach(
    $array as $key=>$value) {
                    
    $str .= $value;
                    (
    next($array)!=null) ? $str.=$string '';
            }
            return 
    $str;    
        } 






    __________________
    لا إله الا الله محمد رسول الله

    فضائية الأقصى :: عينك على الوطن
    نيلسات: 10872 عمودي 27500
    عربسات: 12054 عمودي 27500


    إعلامنا.. إسلامي.. هادف.. مقاوم.. لتعلو الراية..

  8. #8
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2008
    المشاركات
    555


    كود PHP:
    function implode_sim($string$array) {
            
    $str '';
            foreach(
    $array as $key=>$value) {
                    
    $str .= $value;
                    (
    next($array)!=null) ? $str.=$string '';
            }
            return 
    $str;    
        } 
    جميل لم افكر بذه الطريقة انا عملت واحدة ولكن بها مشكلة اذا عنصر قيمته نفس العنصر الاخير لا يطبع الاشارة
    :anger2::anger2:

    ها هي

    كود PHP:
    function implode2($array,$statement){
    $return="";
    end($array);
    $current=current($array);
    foreach(
    $array as $arr){
    if(
    $arr != $current){
    $return.=$arr.$statement;
    }
    else{
    $return.= $arr;
    }
    }
    return 
    $return;







    __________________
    مدونتي قريبا

    بيع ar-ci.com

  9. #9
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2008
    المشاركات
    438


    إعمل المقارنة على key وليس على value
    بيمشي الحال





    __________________
    لا إله الا الله محمد رسول الله

    فضائية الأقصى :: عينك على الوطن
    نيلسات: 10872 عمودي 27500
    عربسات: 12054 عمودي 27500


    إعلامنا.. إسلامي.. هادف.. مقاوم.. لتعلو الراية..

  10. #10
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    كود PHP:
    function _implode($glue,$pieces=null){
        if(!
    $pieces){
            
    $pieces $glue;
            unset(
    $glue);
        }
        if(!
    is_array($pieces)) return;
        
    $output current($pieces);
        while(
    false !== ($next=next($pieces))) $output .= $glue.$next;
        return 
    $output;
    }

    $arr = array('h','e','l','l','o');
    var_dump(_implode('-',$arr));
    echo 
    "\n";
    var_dump(_implode($arr)); 
    - ابتداء من 4.3.0 صار من الممكن ان تقبل implode العنصر الاول كمصفوفة وفي هذه الحالة تقوم بلصقها وارجاعها
    - في حالة عدم ادخال مصفوفة ترجع الدالة null + رسالة خطأ
    - حاولت ضغط الدالة السابقة لكن اعتقد ان هناك عدة طرق افضل

    باذن الله لي عودة مع محاولة جديدة ان لم تكونوا انتقلتم لدالة اخرى.





    __________________
    محمد حمود.

  11. #11
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2008
    المشاركات
    555


    إعمل المقارنة على key وليس على value
    بيمشي الحال
    نعم انا تذكرت ذلك بعد ما شفت دالتك والموضوع لتبادل الخبرات مرة تصيب مرة تخيب :1power::1power:





    __________________
    مدونتي قريبا

    بيع ar-ci.com

  12. #12
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    جميع الأكواد جميلة .. شكراً لمشاركاتكم .. ما رأيكم بمشاركتي؟ وكيف يمكننا أن ندمج جميع الأفكار لنصل إلى الدالة المثالية؟

    كود PHP:
    function implode_sim($para1$para2 '') {
        
    $pieces = (is_array($para1) ? $para1 : (is_array($para2) ? $para2 null));
        if (
    $pieces === null) return false;
        
        
    $glue = (!is_array($para1) ? $para1 $para2);
        
        
    $pieces array_values($pieces);
        
    $count count($pieces);
        for (
    $i 0$i $count$i++) {
            
    $ret .= $pieces[$i] . (isset($pieces[$i 1]) ? $glue '');
        }
        
        return 
    $ret;

    أعدت كتابة الكود كاملاً بطريقتي وأضفت ميزة تبديل الباراميترين .. حيث أن دالة implode بخلاف explode تقبل تبديل الباراميترات ، فيمكن تمرير الفاصل أولاً ثم المصفوفة، أو العكس، وكذلك يمكن تمرير مصفوفة وحدها لذلك جعلت الباراميتر الثاني اختيارياً ..

    تحياتي، أشرف السمهوري





    __________________
    # اتبعني على Twitter
    # عِرفان ساهم ببناء المحتوى العربي العلمي على الإنترنت!

  13. #13
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2008
    المشاركات
    555


    هل من دوال اخرى ؟





    __________________
    مدونتي قريبا

    بيع ar-ci.com

  14. #14
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    اوكي، سننتقل إلى دالة strtoupper وطبعاً strtolower بما أنهما متعاكستان في الوظيفة ..

    سوف نركّز على حروف اللغة الإنجليزية في عملية تحويل حالة الحروف، ولا أدري إن كان أحد يرغب في زيادة الوظيف لتدعم الـ locale مهما كان ..

    تحياتي، أشرف السمهوري





    __________________
    # اتبعني على Twitter
    # عِرفان ساهم ببناء المحتوى العربي العلمي على الإنترنت!

  15. #15
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2008
    المشاركات
    438


    بالإعتماد على الآسكي
    كود PHP:
    function strtoupper_sim($text) {
            
    $txt '';
            for(
    $i=0;$i<strlen($text);$i++) {
                if(
    ord($text[$i])>=97 and ord($text[$i])<=122) {
                    
    $txt .= chr(ord($text[$i])-32);
                } else {
                    
    $txt .= $text[$i];
                }
            }
            return 
    $txt;
        } 
    كود PHP:
    function strtolower_sim($text) {
            
    $txt '';
            for(
    $i=0;$i<strlen($text);$i++) {
                if(
    ord($text[$i])>=65 and ord($text[$i])<=90) {
                    
    $txt .= chr(ord($text[$i])+32);
                } else {
                    
    $txt .= $text[$i];
                }
            }
            return 
    $txt;
        } 






    __________________
    لا إله الا الله محمد رسول الله

    فضائية الأقصى :: عينك على الوطن
    نيلسات: 10872 عمودي 27500
    عربسات: 12054 عمودي 27500


    إعلامنا.. إسلامي.. هادف.. مقاوم.. لتعلو الراية..





المواضيع المتشابهه

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

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

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