سلام،
خسته نباشيد
آرايه نوع دادهاي خاص است که مي توان آن را به يک ظرف از مقادير تشبيه کرد.
آرايه مي توند مجموعه اي از اعداد،رشته ها،مولفه ها،اشاره گرها و حتي آرايه ديگري باشد.برخلاف برخي ديگر از زبان هاي برنامه نويسي مقادير آرايه ها مي توند به صورت مختلط باشد.به طور مثال يک آرايه مي تواند به طور همزمان اعداد،رشته و مولفه ها را ذخير کنيد.
به هر يک از عضو هاي يک آرايه يک عنصر از آن آرايه مي گويند.
آرايه چند بعدي:
هنگامي که عنصر يک آرايه خود يک آرايه باشد به آن آرايه آرايه چند بعدي مي گويند.
کليدها:
کليدها را مي تون به نام متغيير ها تشبيه کرد که از طريق آنها مي توان مقادير مربوطه دسترسي پيدا کرد.
اگه نوع کليد رشته باشد به آن آرايه آرايه انجمني مي گويند.
تغغير پذيري:
برخلاف زبان هايي مانند جاوا و ++C در زبان PHP نيازي به مشخص کردن تعداد عناصر آرايه نمي باشد و آرايه ها مي توانند بر اساس نياز بزرگ يا کوچک شوند.به اين خاصيت
تغيير پذيري آرايه مي گويند.
يکي ديگر از ويژگي هاي آرايه هاي PHP عدم نياز به تعريف نوع داده مي باشد.در واقع اين خاصيت موجب افزايش
انعطاف پذيري آرايه ها شده است.
براي ايجاد آرايه از تابع
array استفاده مي شود.
براي اين منظور به صورت زير عمل مي کنيم:
- کد: انتخاب همه
$rsh = array('islamic','republic','of','Iran');
ت
وضيحات:
rsh متغيري اختياري است.
islamic و republic و of و Iran چهار عنصر دلخواه هستند که مي توان تعداد آنها را تغيير داد.
کليدهاي آرايه چون تعريف نشده اند به طور پيشفرض عدد مي باشند.
--
براي دستيابي به مقادير آرايه به صورت زير عمل مي کنيم:
- کد: انتخاب همه
$rsh[0];
براي واضح بودن مثال:
- کد: انتخاب همه
echo $rsh[0];
که خروجي اين مثال با توجه به عناصر موجود islamic خواهد بود.
براي افزودن يک عنصر جديد به صورت زير عمل مي کنيم:
- کد: انتخاب همه
$rsh[4]= 'Dot';
كه Dot مقدار دلخواه ما مي باشد.
براي نمايش تمامي مقادير يک آرايه از
print_r استفاده مي کنيم:
- کد: انتخاب همه
print_r($rsh);
ايجاد آرايه هاي انجمني:
همانطور که توضيح داده شد آرايه هاي انجمني داراي کليدهايي از نوع رشته هستند.در واقع مزيت آرايه هاي انجمني
ايجاد يک ارتباط معنايي بين کليد و عناصر مي باشد.
مثلا:
- کد: انتخاب همه
$rsh= array('name'=>'reza','gener'=>'male');
echo $rsh['name'];
echo $rsh['gener'];
براي شمارش تعداد عاصر يک آرايه از
count استفاده مي کنيم.
- کد: انتخاب همه
echo count($rsh);
براي دستايابي به تمام عناصر آرايه ها مي توان از حلقه هاي تکرار استفاده کرد:
- کد: انتخاب همه
<?php
$rsh = array('islamic','republic','of','Iran');
$counts = count($rsh);
for($i=0;$i<$counts;$i++){
echo "$rsh[$i] ";
}
?>
و اگر آرايه ما از نوع آرايه هاي انجمني باشه بايد از foreach استفاده کنيم:
- کد: انتخاب همه
<?php
$rsh= array('name'=>'reza','gener'=>'Male','Mina'=>'Female','Mohammad'=>'Male');
foreach ($rsh as $Key => $value)
{
echo "The value of $Key is : $value";
}
?>
آرايه هاي چند بعدي:همونطور که گفتم اگه اگر عناصر يک آرايه خود آرايه باشند به آن آرايه، آرايه چند بعدي مي گويند.
مثال:
- کد: انتخاب همه
<?php
$rsh= array();
$rsh[0] = array('CMS'=>'reza','PHP'=>'SH');
$rsh[1] = array('URL'=>'http://Rightclick.ir','Title'=>'.: | Rightclick |:.');
$url = $rsh[1]['URL'];
$title = $rsh[1]['Title'];
echo 'Find nice articles on <a href='.$url.'>'.$title.'</a>';
?>
که فکر نکنم نياز به توضيح نداشته باشه.
تغيير مولفه هاي جاري:با استفاده از توابع
current,next,prev,reset,end مي توان در آرايه حر کت کرد.
reset : اين تابع اشاره گر را به اولين عنصر آرايه مي برد و مقداري را برنمي گرداند.
next : اين تابع اشاره گر را به عنصر بعدي مي برد و در صورت وجود مقدار آن را برمي گرداند در غير اين صورت false بر گردانده مي شود.
prev : اين تابع هم که عکس next عمل مي کند.
current : اين تابع عنصر جاري را بر مي گرداند.
end : اين تابع به آخرين عنصر موجود اشاره مي کند.
مثال:
- کد: انتخاب همه
<?php
// Even nums up to 20
$even_num = array('2','4','6','8','10','12','14','16','18','20');
reset($even_num);
//echo prev($even_num).'<br>';
echo next($even_num).'<br>';
echo next($even_num) .'<br>';
echo prev($even_num) .'<br>';
reset($even_num);
echo end($even_num);
?>
قصد داشتم تمام مطالب رو يک جا بگم.ديدم هم خسته کننده و هم طولاني مي شه وبعلاوه مجبور مي شم مثال کمتري بزنم براي همين در يک تاپيک مجزا قسمت بعدي رو بزودي ارسال مي کنم.در ضمن براي تيتر ها هم از کتاب کمک گرفتم.
موفق باشيد
التماس دعا
خدانگهدار
در ادامه ميخوام با يك تابع فوق العاده ارزشمند در آرايه شروع كنم.
اين تابع در كد نويسي يكي از شيووه هاي متداول من شده و خيلي برام كارايي داشته.
فرض كنيد در فرم ورودي تون 10 الي 20 فيلد داشته باشيد و همه مقادير ارسال با توجه به اينكه با از نظر وجود كاراكتر هاي مخرب (يا ناسازگار يا هر اسمي!) بررسي بشند تا جلوي برخي روش هاي متداول نفوذ مانند sql_injection و ... گرفته بشه.
كد زير رو ببنيد:
- کد: انتخاب همه
$name = safe($_POST['name']);
$family= safe($_POST['family']);
$test= safe($_POST['test']);
$php= safe($_POST['php']);
$net= safe($_POST['net']);
$wht= safe($_POST['wht']);
$user= safe($_POST['user']);
$pass= safe($_POST['pass']);
در اينجا تابع safe يك تابع user defined هست يعني خودم براي خودم تعريف كردم . مثلا ميتونه به اين صورت باشه:
- کد: انتخاب همه
function safe($value,$type='0'){
$value = mysql_real_escape_string( $value );
$value = stripslashes( trim($value) );
$value = htmlspecialchars($value);
return $value;
}
ديديد كه براي تك تك متغير ها مجبور شدم،يك تابع رو به كار ببندم و كلي دردسر ، و تازه چون نميخواستم توضيح طولاني بشه يك تابع هم (safe) به كار بردم وگرنه بايد براي هر كدوم از متغير ها 3 الي 4 خط كد مي نوشتم.
همونطور كه مي دونيم متدهاي POST و GET آرايه هستند.بنابراين ما با توابع مفيد آرايه هاي مي تونيم روشون جولان بديم!
بريم سر وقت اصل مطلب:
[COLOR="Red"]
تابع array_walk[/COLOR]
اين تابه 2 ورودي داره.اولي نام آرايه و دومي نام تابع.
ساختار :
- کد: انتخاب همه
bool array_walk ( array &$array , callback $funcname [, mixed $userdata ] )
نقل قول از manula php.net
Applies the user-defined function funcname to each element of the array array.
array_walk() is not affected by the internal array pointer of array. array_walk() will walk through the entire array regardless of pointer position.
[/QUOTE]
در واقع اين تابع همونطور كه از اسمش پيداست روي ْآرايه ما قدم ميزنه ! و كليد و مقدار هر عنصر آرايه رو از يك تابع شخصي ميگذرونه و نتيجه رو جايگزينش مي كنه.
و اما استفاده اي كه من از اين تابع كردم:
- کد: انتخاب همه
function safemini(&$value,$key){
$value = safe($value);
return $value;
}
array_walk($_POST,'safemini');
تابع safemini كه در برنامه خودم بود رو كمي ساده تر كردم،در واقع اين باز نوعي خلاقيت در كد نويسي محسوب ميشه كه چرا تابع جديدي ايجاد شده...مثلا گاهي لازم هست در بعضي فرم هامون مقادير html هم بپذيريم از كاربر پس ، تو اين تابع جديد ميشه يك شرط بذاريم اگه مقدار key فلان بود يا فلان چيزو توش داشت ديگه كاريش نداشته باش يا يك طور ديگه باهاش رفتار بشه و ...
استفاده ديگه اي كه از اين تابع داشتم در صفحات ajax بود!اگر با ajax كار كرده باشيد حتما ميدونيد موقع ارسال مقادير اگه فرم شامل برخي كاراكتر هاي خاص باشه js خطا ميده ! چون ساختارش بهم ميريزه و حقم داره ! پس توي js ما مقادير رو خنصي مي كنيم و مثلا + رو با يك مجمموعه كاراكتر دلخواه جايگزين مي كنيم.و بعد مي فرستيم . مثلا من + رو با **rsh** جايگزين مي كنم و بعد سمت php مجددا **rsh** رو با + عوض مي كنم.اين كار هم بايد براي تك تك مقادير ارسالي در صفحات ajax رعايت بشه پس با هيمن روش خيلي از حجم كد كاسته ميشه...
ادامه دارد!