شوّيت: شبكة كرة قدم اجتماعية




العودة   سوالف سوفت > سوالف برمجة المواقع وتطويرها > PHP
التسجيل المدوّنات البحث مشاركات اليوم جعل الأقسام مقروءة

الرد على الموضوع
 
LinkBack أدوات الموضوع
مشرف قسم PHP
#1  
محاكاة دوال PHP

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

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

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

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

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

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

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

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

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

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

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






__________________
# للتواصل السريع (على ساحات) : http://www.sa7.at/ashraf
# اتبعني على Twitter
أشرف السمهوري is offline   قديم 23-05-2009, 08:54 PM
الرد مع إقتباس
عضو مميز
#2  

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






محب الله ورسوله is online now   قديم 24-05-2009, 02:41 AM
الرد مع إقتباس
عضو نشيط جدا
#3  

فكرة جميلة ..

ممكن بهذا الشكل؟
كود 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); 






__________________
محمد حمود.
mr_m is offline   قديم 24-05-2009, 05:17 AM
الرد مع إقتباس
عضو نشيط جدا
#4  

الدالة السابقة تحذف الرموز الغير مطبوعة أيضا لكن 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 الساعة 06:22 AM.
mr_m is offline   قديم 24-05-2009, 06:13 AM
الرد مع إقتباس
مشرف قسم PHP
#5  

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

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

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

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

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






__________________
# للتواصل السريع (على ساحات) : http://www.sa7.at/ashraf
# اتبعني على Twitter
أشرف السمهوري is offline   قديم 24-05-2009, 09:55 AM
الرد مع إقتباس
عضو سوبر نشيط
#6  

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

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
exchangeboss is offline   قديم 24-05-2009, 11:16 AM
الرد مع إقتباس
عضو نشيط جدا
#7  

كود 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


إعلامنا.. إسلامي.. هادف.. مقاوم.. لتعلو الراية..
MPHP is offline   قديم 24-05-2009, 11:31 AM
الرد مع إقتباس
عضو سوبر نشيط
#8  

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


ها هي

كود 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
exchangeboss is offline   قديم 24-05-2009, 11:53 AM
الرد مع إقتباس
عضو نشيط جدا
#9  

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






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

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


إعلامنا.. إسلامي.. هادف.. مقاوم.. لتعلو الراية..
MPHP is offline   قديم 24-05-2009, 12:01 PM
الرد مع إقتباس
عضو نشيط جدا
#10  

كود 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 + رسالة خطأ
- حاولت ضغط الدالة السابقة لكن اعتقد ان هناك عدة طرق افضل

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






__________________
محمد حمود.
mr_m is offline   قديم 24-05-2009, 12:13 PM
الرد مع إقتباس
عضو سوبر نشيط
#11  

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






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

بيع ar-ci.com
exchangeboss is offline   قديم 24-05-2009, 12:14 PM
الرد مع إقتباس
مشرف قسم PHP
#12  

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

كود 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 تقبل تبديل الباراميترات ، فيمكن تمرير الفاصل أولاً ثم المصفوفة، أو العكس، وكذلك يمكن تمرير مصفوفة وحدها لذلك جعلت الباراميتر الثاني اختيارياً ..

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






__________________
# للتواصل السريع (على ساحات) : http://www.sa7.at/ashraf
# اتبعني على Twitter
أشرف السمهوري is offline   قديم 24-05-2009, 02:07 PM
الرد مع إقتباس
عضو سوبر نشيط
#13  

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






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

بيع ar-ci.com
exchangeboss is offline   قديم 24-05-2009, 03:37 PM
الرد مع إقتباس
مشرف قسم PHP
#14  

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

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

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






__________________
# للتواصل السريع (على ساحات) : http://www.sa7.at/ashraf
# اتبعني على Twitter
أشرف السمهوري is offline   قديم 24-05-2009, 03:44 PM
الرد مع إقتباس
عضو نشيط جدا
#15  

بالإعتماد على الآسكي
كود 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


إعلامنا.. إسلامي.. هادف.. مقاوم.. لتعلو الراية..
MPHP is offline   قديم 24-05-2009, 04:28 PM
الرد مع إقتباس
مشرف قسم PHP
#16  

رائع أستاذ MPHP هذا الحل اللي كنت أنتظره ...

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

منتظر تعليقات الأعضاء أولاً بعدين ننتقل لدالة أخرى

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






__________________
# للتواصل السريع (على ساحات) : http://www.sa7.at/ashraf
# اتبعني على Twitter
أشرف السمهوري is offline   قديم 24-05-2009, 05:14 PM
الرد مع إقتباس
عضو نشيط جدا
#17  

جزاك الله خيراً اخي أشرف






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

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


إعلامنا.. إسلامي.. هادف.. مقاوم.. لتعلو الراية..
MPHP is offline   قديم 24-05-2009, 05:26 PM
الرد مع إقتباس
مشرف قسم PHP
#18  

وإياك يارب .. طيب خلص ما رح أنتظر الأعضاء ههه حتى نستغل الوقت بأكبر كم من الدوال ..

من الشاطر اللي يحاكي لنا دالة ord ؟

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






__________________
# للتواصل السريع (على ساحات) : http://www.sa7.at/ashraf
# اتبعني على Twitter
أشرف السمهوري is offline   قديم 24-05-2009, 05:56 PM
الرد مع إقتباس
عضو نشيط جدا
#19  

هون بيلزمنا Look up Table، بحتوي على القيم الخاصة ب ASCII، أنا هون بدأت من القيم 32 وطالع
كود PHP:
function ord_sim($char) {
    
$LUT = array(32=>' ',33=>'!',34=>'"',35=>'#',36=>'$',37=>'%',38=>'&',39=>'\'',40=>'\(',41=>'\)',42=>'*',43=>'+',44=>',',45=>'-',46=>'.',47=>'/',48=>'0',49=>'1',50=>'2',51=>'3',52=>'4',53=>'5',54=>'6',55=>'7',56=>'8',57=>'9',58=>':',59=>';',60=>'<',61=>'=',62=>'>',63=>'?',64=>'@',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'[',92=>'\\',93=>']',94=>'^',95=>'_',96=>'`',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'{',124=>'|',125=>'}',126=>'~',127=>'',128=>'€',129=>'',130=>'‚',131=>'ƒ',132=>'„',133=>'…',134=>'†',135=>'‡',136=>'ˆ',137=>'‰',138=>'Š',139=>'‹',140=>'Œ',141=>'',142=>'Ž',143=>'',144=>'',145=>'‘',146=>'’',147=>'“',148=>'”',149=>'•',150=>'–',151=>'—',152=>'˜',153=>'™',154=>'š',155=>'›',156=>'œ',157=>'',158=>'ž',159=>'Ÿ',160=>' ',161=>'¡',162=>'¢',163=>'£',164=>'¤',165=>'¥',166=>'¦',167=>'§',168=>'¨',169=>'©',170=>'ª',171=>'«',172=>'¬',173=>'­',174=>'®',175=>'¯',176=>'°',177=>'±',178=>'²',179=>'³',180=>'´',181=>'µ',182=>'¶',183=>'·',184=>'¸',185=>'¹',186=>'º',187=>'»',188=>'¼',189=>'½',190=>'¾',191=>'¿',192=>'À',193=>'Á',194=>'Â',195=>'Ã',196=>'Ä',197=>'Å',198=>'Æ',199=>'Ç',200=>'È',201=>'É',202=>'Ê',203=>'Ë',204=>'Ì',205=>'Í',206=>'Î',207=>'Ï',208=>'Ð',209=>'Ñ',210=>'Ò',211=>'Ó',212=>'Ô',213=>'Õ',214=>'Ö',215=>'×',216=>'Ø',217=>'Ù',218=>'Ú',219=>'Û',220=>'Ü',221=>'Ý',222=>'Þ',223=>'ß',224=>'à',225=>'á',226=>'â',227=>'ã',228=>'ä',229=>'å',230=>'æ',231=>'ç',232=>'è',233=>'é',234=>'ê',235=>'ë',236=>'ì',237=>'í',238=>'î',239=>'ï',240=>'ð',241=>'ñ',242=>'ò',243=>'ó',244=>'ô',245=>'õ',246=>'ö',247=>'÷',248=>'ø',249=>'ù',250=>'ú',251=>'û',252=>'ü',253=>'ý',254=>'þ',255=>'ÿ');
    foreach(
$LUT as $key=>$value) {
        if(
$value == $char[0]) {
            return 
$key;
        }
    }







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

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


إعلامنا.. إسلامي.. هادف.. مقاوم.. لتعلو الراية..
MPHP is offline   قديم 24-05-2009, 07:41 PM
الرد مع إقتباس
عضو فعال جدا
#20  

موضوع جميل
بانتظار المزيد من الدوال ، الأخ MPHP خلص على كل الدوال






محمود حسين is offline   قديم 24-05-2009, 08:41 PM
الرد مع إقتباس
عضو نشيط جدا
#21  

حيّاك الله أخي فكرة






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

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


إعلامنا.. إسلامي.. هادف.. مقاوم.. لتعلو الراية..
MPHP is offline   قديم 24-05-2009, 08:45 PM
الرد مع إقتباس
عضو سوبر نشيط
#22  

إقتباس:
المشاركة الأصلية بواسطة MPHP مشاهدة مشاركة
حيّاك الله أخي فكرة
يا اخي ارحمنا خليلنا شوي دوال
هههههههه
بمزح معاك اخي






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

بيع ar-ci.com
exchangeboss is offline   قديم 24-05-2009, 09:02 PM
الرد مع إقتباس
عضو سوبر نشيط
#23  

رد مغلوط اسف






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

بيع ar-ci.com

آخر تعديل بواسطة exchangeboss في 24-05-2009 الساعة 09:06 PM.
exchangeboss is offline   قديم 24-05-2009, 09:05 PM
الرد مع إقتباس
عضو نشيط جدا
#24  

طيب ما رأيكم في array_chunk






__________________
محمد حمود.
mr_m is offline   قديم 24-05-2009, 09:33 PM
الرد مع إقتباس
مشرف قسم PHP
#25  

هههههههه ما شاء الله عليه MPHP :P

طيب قبل لا ننتقل إلى دالة أخرى وهي كما حددها mr_m دالة array_chunk

حابب أعرض لكم محاكاتي الغبية لدالة ord حيث أني سأعتمد فيها على دالة chr التي تعاكسها في العمل ..

كود PHP:

function ord_sim($chr) {
    for (
$i 0$i <= 200$i++) {
        if (
chr($i) == $chr) return $i;
    }

حطيت ليميت للأرقام من 0 إلى 200 لأني أخاف إذا خليته إنفنتي يكون فيه إدخال مو موجود وتصير حلقة لا نهائية .. عموماً يمكن تنفيذ ذلك ببساطة بجملة while و return ..

الآن دور دالة array_chunk ..

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






__________________
# للتواصل السريع (على ساحات) : http://www.sa7.at/ashraf
# اتبعني على Twitter
أشرف السمهوري is offline   قديم 24-05-2009, 10:17 PM
الرد مع إقتباس
الرد على الموضوع


 

أدوات الموضوع

قوانين المشاركات
لا يمكنك كتابة مواضيع جديدة
لا يمكنك إضافة ردود
لا يمكنك إرسال مرفقات
لا يمكنك تعديل مشاركاتك

كود vB متاح
كود [IMG] متاح
كود HTML غير متاح
Trackbacks are متاح
Pingbacks are متاح
Refbacks are متاح


المواضيع المشابهه
الموضوع كاتب الموضوع القسم الردود آخر مشاركة
مساعده في دوال البحث php Q8website PHP 7 17-11-2007 12:50 AM
بعض دوال المصفوفات (PHP) الحق يعلو PHP 3 02-08-2007 07:54 PM
دوال php مع أمثله لها (متجدد) albarz.net PHP 13 09-10-2006 12:42 AM
هنا كتب و دوال هامة فى PHP prokhaled PHP 5 27-09-2004 08:04 PM
من يشرح لنا دوال XML في PHP daif PHP 5 05-10-2003 01:41 AM


جميع الأوقات بتوقيت غرينتش +3. الوقت الآن هو 03:31 PM.