توابع php - کار با آرایه ها



visibility  
mode_comment   ۳۸

قبل از اینکه این جلسه رو شروع کنیم، لازمه از همه ی دوستانی که با لطف و محبتشون نسبت به بنده، عرض تسلیت داشتند، صمیمانه سپاسگذاری کنم . امیدوارم که خداوند متعال روح این عزیز از دست رفته رو قرین رحمت و مغفرت خودش قرار بده .

در جلسه ی امروز می خوایم در مورد کار با آرایه ها صحبت کنیم و توابع مهم PHP در این زمینه رو معرفی کنیم . در پایان این جلسه هم یه مینی پروژه ی کوچیک رو داریم که در اون لیستی از مخاطبین رو بر اساس نا، شماره تماس و جنسیتشون جستجو می کنیم .

:: مطالب مطرح شده در این جلسه عبارتند از :

توابع کار با آرايه ها در PHP :

  • ساخت يک آرايه
  • شمارش تعداد عناصر آرايه
  • چک کردن وجود يک کليد در آرايه
  • چک کردن حضور يک مقدار در آرايه
  • دريافت همه يا بخشي از کليد هاي يک آرايه
  • دريافت همه ي مقادير موجود در آرايه
  • تغير حروف همه ي کليدهاي آرايه
  • شکستن آرايه به چند بخش
  • ايجاد يک آرايه با ترکيب دو آرايه ي کليدها و مقادير
  • دريافت تعداد تکرار اعضاي آرايه
  • بدست آوردن تفاوت دو آرايه با همديگر
  • پر کردن بخشي از آرايه با مقادير خاص
  • فيلتر کردن اعضاي ارايه با استفاده از يک تابع callback
  • جابجايي کليدها و مقادير يک آرايه با همديگر
  • محاسبه ي اشتراک دو آرايه
  •  ادغام و اجتماع دو آرايه
  • مخلوط کردن آرايه به صورت تصادفي
  • توابع مرتب سازي آرايه ها
  • پرکردن آرايه از مقادير تا طول خاص
  • اضافه کردن يک عنصر به انتهاي آرايه
  • برداشتن آخرين عضو آرايه
  • محاسبه ي حاصل جمع و ضرب کل عناصر آرايه
  • برداشتن يک يا چند عنصر از آرايه به صورت تصادفي و رندم
  • جايگزيني عناصر آرايه با عناصر يک آرايه ي ديگر
  • معکوس کردن آرايه
  • جستجو در آرايه
  • دريافت يک زير آرايه از آرايه ي بزرگتر
  • حذف عناصر تکراري از آرايه
  • اعمال يک تابع براي اجرا بر روي تک تک عناصر آرايه
  • استخراج متغير از اعضاي آرايه
  • ميني پروژه : مديريت، جستجو و فيلتر کردن جدول مخاطبين تلفن
  • تمرين
info توجه

این مطلب یک جلسه از آموزش برنامه نویسی PHP می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در آموزش برنامه نویسی PHP

comment دیدگاه کاربران
na3r replyپاسخ

سلام استاد …
ممنون؛ جلسه کار با آرایه ها بسیار لذت بخش بود …
این یه هفته که دوره متوقف شده بود اصلا حس خوبی نداشتم … لطفا مثل روال گذشته با همون کیفیت و سرعت ادامه بدین …
یه سوال غیر مرتبط با این جلسه دارم که بعضی وقتا حسابی گیرم میندازه !
– در خطوط پایین کد ، متغییری رو تعریف می کنم و نیاز پیدا میکنم در خطوط بالاتر ازش استفاده کنم، مثلا چاپش کنم. چطور می تونم این کارو انجام بدم که با اررور برخورد نکنم.
ابتدا به نظرم اومد که گلوبالش کنم ولی جواب نداد ، و از طریق تعریف پوینتر هم راه به جایی نبردم.
مجبور شدم از str_replace استفاده کنم و درواقع از یه عبارت خاص بجای متغییر استفاده کنم!
که فکر می کنم استاندارد نباشه!
تصور کنین در رشته کد زیر مقدار متغیر در تمام خطوط کد یکسان و برابر با مقدار نهایی چاپ بشه!
من فقط می خوام بدونم چطور متغییری که در بالای کدم چاپ کردم رو به مقدار دهی های بعدش وابسته کنم.

لقمان آوند

سلام ناصرجان
یه سوال ازت دارم
آیا می تونی قبل از اینکه متولد بشی، ازدواج کنی ؟
قبل از اینکه یه متغیر رو هم تعریف کنی، نمی تونی ازش استفاده کنی ! (ممکنه ارور یا مقدار null و خالی بگیری)

na3r

ممنون استاد . پس واقعا راهی برای استفاده از متغییر پیش از تعریف و مقدار دهی وجود نداره . و متغیر ها تنها به مقدار دهی های پیش از استفاده از متغیر وابسته هستن و نه بعد از اون.
و اینجا اصل اجرای کد “از بالا به پایین” کاملا حکم فرماست!
مرسی.

لقمان آوند

بله دقیقا

danial asvadi replyپاسخ

سلام استاد خسته نباشید
استاد من مینی پروژه رو طبق تمرینی که گفته بودید به صورت اجاکس کردم اما وقتی جسجو میکنم جستجو انجام میشه اما به فیلد اضافه میشه:Oلینک دانلود فایل رو میزارم اگه زحمتی نیست که نگاه بندازید ببینید کجاش مشکل داره
http://www.uplooder.net/cgi-bin/dl.cgi?key=a6fdf8ecbb2e566a6ba5b2aecec083b8

لقمان آوند

برای انجام درخواست ها به صورت ایجکس باید کد php شما در فایل جداگانه ای باشه تا به جز خروجی کد php چیز دیگه ای برگردونده نشه . منطقی نیست که درخواست ها رو به همون فایل بفرستید . در این صورت همه ی اون تگهای html هم به عنوان خروجی برگردونده میشن در جواب ایجکس .

danial asvadi replyپاسخ

به نکته دیگه یادم رفت تو کامنت بالا بگم
وقتی کد های php رو تو فایل جداگانه میزارم این مشکل پیش نمیاد!

لقمان آوند

کار درست همینه .
درخواست ایجکس رو فقط به صفحه ی php ای ارسال کنید که حاوی کدهای php باشه فقط …
جواب کامنت قبلی رو هم بخون .

1234567890 replyپاسخ

با عرض سلام
استاد جهت انجام تمرین فایل فرم رو به صورت اجاکس در آوردم . خطا نداره اما جستجو هم انجام نمیده . حتی میخام بگم به صفحه php ارسال میشه اما هیچی برنمیگردونه …
میشه راهنمایی فرمایید یا در صورت امکان ، میتونم جهت بررسی به ایمیل شما ارسال کنم ؟
با تشکر

لقمان آوند

بله ، حتما
فایلهاتون رو زیپ کنیم برام ایمیل کنید تا بررسی کنم .

rasool eslami replyپاسخ

سلام اقای آوند این جلسه ها به بعد چرا دانلود نمیشن

لقمان آوند

سلام
داریم هاست دانلود رو منتقل میکنیم .
امروز فردا در دانلود ها اختلال هست .
عذرخواهی میکنم .

امید داوالا replyپاسخ

سلام آقای دکتر،
در مینی پروژه این جلسه، در فایل contacts چرا برای ورودی داده ها 3 تا فرم مختلف تعریف کردید با 3 تا fieldset؟ (با یک فرم هم مشکلی مگر پیش میاد؟!)
ارادتمند..

لقمان آوند

سلام
چون من اینجا می خواستم جداگانه عمل سرچ برای هر فیلد (نام،شماره و جنسیت) رو انجام بدم .
اگر بخواید از هرسه هم می تونید در یک فرم استفاده کنید و حرف شما هم درسته .

جعفر پیشدادی replyپاسخ

با سلام تمرین اولی جستجوی مرد یا زن بودن را درارایه انجام می داد گفتین با تابع array _filter انجام بدهید بدین صورت انجام دادن فقط کد طولانی شده لطفا راهنمایی نمایید

لقمان آوند

سلام
کدتون ناقص بود. لطفا فایل مورد نظر رو برام ایمیل کنید …

Aref Taker replyپاسخ

سلام

میشه معنی شرط جلوی عبارت ریترن رو بگید چیه؟

کاربرد عملگر ! اینجا چیه؟
در کل اگه میشه عبارت جلوی return رو توضیح بدید.
ممنون

لقمان آوند

سلام
& عملگر and بیتی هست . اگر عددی رو با 1 بیایم و & کنیم و نتیجش بشه 0 یعنی اون عدد زوجه!
چون این تابع می خواد اعداد زوج رو فیلتر کنه یه ! (not) گذاشتیم قبلش که اگه نتیجه عملیات 0 بود (یعنی عدد زوج بود) مقدار 1 یا همون true رو برگردونه .
!0 = 1 میشه .
عملگر ! معرف not بیتی هست. یه جورایی برعکس میکنه مقدار true و false رو .

Aref Taker replyپاسخ

سلام استاد من مینی پروژه رو درست کردم
ولی بعد از این که ایجکس اش می کنم کار نمی کنه.
ممنون میشم کمکم کنید.
http://uploadboy.com/x3j1ajl5z9d5.html

در ضمن فقط قسمت سرچ با نام رو درست کردم ممنون.

لقمان آوند

سلام
این فایل ها رو جایگزین کنید .
درست شده .

Aref Taker replyپاسخ

سلام
من تمرینی رو که گفته بودید با array_filter انجام بدیم رو انجام دادم ولی وقتی خروجی رو می گیرم به جای این که فقط نتایج مربوط به نام ها (ایندکس نام ها) رو نشون بده , ایندکس های دیگه مثلا شماره ی افراد رو هم نشون میده می خواستم ببینم چطور باید فقط ایندکس نام ها رو نشون بدم؟
http://uploadboy.com/hg0eivkrw3bg.html
(لطفا آدرس رو بعدا حذف کنید)

لقمان آوند

نحوه ای که کدتون رو نوشتید اشتباه هست .
خیلی جالب نیست که از آرایه POST درون یه تابع فیلتر استفاده کنید .
الان حضور ذهن ندارم . تمرین این جلسه دقیقا چی میخواست ؟

میلاد رش replyپاسخ

سلام استاد بنده تا کی پشتیبانی دارم ( به پرسش هام پاسخ میدید) تازه به این فصل رسیدم متاسفانه خیلی کند فصل ها رو دنبال کردم ولی دیگه به روند اموزشیم سرعت بخشیدم…

لقمان آوند

سلام
تو بخش نظرات مطالب دوره سوالاتون رو بپرسید همیشه جواب میدیم .
موفق باشید

Massud Tarekhi replyپاسخ

با سلام
استاد چگونه می توم تابعی رو بنویسم که در تابع array_walk اگر عدد فرد بود اون رو به آرایه برگردونه ولی اگه زوج بود حذف کنه

لقمان آوند

برای اینکار بهتره از تابع array_filter استفاده کنید . مثالش در اینجا آورده شده .
array_walk بیشتر برای اینه که یه کار خاص رو روی همه اعضای آرایه اعمال کنید .

shahriar rad replyپاسخ

با سلام و درود

آقای آوند چرا به جای اینکه ما در پروژه از false==! استفاده کنیم از true === استفاده نکردیم؟

لقمان آوند

بستگی به مقایسمون داره و چیزی که داریم مقایسش می کنیم. مثلا یه تابع جستجو هست که اگر پیدا نکنه false بر می گردونه و اگه چیزی پیدا کنه ایندکس محل یافتن رو بر میگردونه. خوب اینجا برای اینکه ببینیم چیزی پیدا کرده باید مقایسه کنیم که آیا مخالف فالس هست یا نه! مقایسه با true اینجا کارایی نداره برای نمونه.

mohammad replyپاسخ

سلام استاد
چرا در اکثر نمونه های آموزشی و مینی پروژه ها درجایی که میشه بدون استفاده از متغیر کاری رو انجام داد ابتدا مثلا مقداری که تابع خاص برمیگردونه و یا ایندکس های آرایه های post و get رو توی متغیر ذخیره میکنید ؟
مگه استفاده بیش ازحد از متغیر ها موجب درگیری بی مورد رم و سایر منابع سرور نمیشه ؟

آیا اصولا درسته که در یک فایل php که کد های php میان html استفاده شده چند بار تگ php رو باز و بسته کنیم به طوری که یکبار توابع رو از فایلی فراخوانی کنیم و سپس در هر قسمت از کد html از تابع ها به صورت جدا استفاده کینم ؟

لقمان آوند

سلام
خوب اگر یکبار تابع صدا زده بشه و نتیجش تو یه متغیر قرار بگیره بعدا می تونیم با همون متغیر کار کنیم به جای اینکه چندین بار تابع رو صدا بزنیم که زمان اجرای بالاتری ببره . برای گت و پست هم خیلی جالب نیست مستقیما این آرایه رو در جاهای مختلف درگیر کنیم و احتما خطا و تغیر محتویاتش بالاتر میره .
_
بله این کار در php عرف و کاملا معمولی و پراستفاده هست . مشکلی نداره .

سیروان replyپاسخ

استاد سابمیت چیست؟؟؟ فکر کنم میدونم ولی معنی اسمشو یادم رفه
استاد این عکس زیر رو ببینید
http://rozup.ir/view/1414596/3-31-2016%201-40-42%20AM.png

operand این کلمه رو خودتون تعریف کردید؟مثل متغیر و…؟؟یا تابعه ؟varچکاری میکنه در این کد؟؟؟

وحید صالحی

submit یعنی ارسال کردن, var هم مخفف variable به معنی متغیر هست و در بعضی زبانها مثل جاوااسکریپت برای تعریف یک متغییر ازش استفاده می شه و عبارتی هم که بعدش قرار می گیره که در این تصویر operand هست نام متغییر هست که هر کلمه ای رو میشه بجاش استفاده کرد و هر جا در تابع یا پروژه از این نام استفاده بشه مقداری رو که توسط علامت مساوی جلوش هست رو بر می گردونه و میشه ازش استفاده کرد:
مثلا var operand=1 که حالا هر جا در طول کدنویسی و پروژه از operand استفاده بشه یعنی 1 که این تنها یک مثال ساده برای درک بهتر این مورد بود…
موفق باشید

حسین محمدی replyپاسخ

سلام من فایل های شما رو تو یک سایت دیگه دیدم که بصورت رایگان قرار دادن اینم ادرسش

لقمان آوند

سلام
بهشون تذکر دادیم و قرار شد بردارن.
متاسفانه بعضی ها خیلی راحت حق الناس رو می خورن …

Pourya Ariyafar replyپاسخ

سلام استاد
من اومدم از تابع array_walk استفاده کردم تا مقادیر یک آرایه رو به حروف بزرگ تبدیل کنم، ب نظرم همه چی رو درست نوشتم ولی در خروجی فقط مقدار true رو میگیرم درحالی که من میخوام مقادیر آرایه با حروف بزرگ چاپ شن
اینم کد

ممنون

لقمان آوند

مقدار برگشتی تابع array_walk یا true هست یا فالس …
با این تابع شما صرفا می تونید یک تابع خاص رو رو تک تک عناصر ارایه صدا بزنید.
در واقع شما باید بعدش خو آرایه رو چاپ کنید و ببینید …
یا اینکه تو toUpper مقدار بزرگ شده رو چاپ می کردید .

ppp replyپاسخ

سلام استاد اوند
استاداوند می خوام دو تا ارایه رو تفریق کنم و سه شبانه روز رو این مشکل کار کردم تابع های زیادی رو امتحان کردم زیاد سرچ کردم اما نتونستم که نتونسم حتی از برنامه نویس های حرفه ای هم پرسیدم اما نتونستن مشکل بنده رو حل کنن
حتی در انجمن و گروه برنامه نویس هم گفتم اما کسی جواب نداد

مشکل من اینه این عکسو ببینید .
http://rozup.ir/view/2305047/kopr.png

از تابع array_diffهم استفاده کردم اما این مشکلو داره که از اول ارایه دو تا حذف میکنه در حالی که من میخوام مشابه اون ارایه دومی در ارایه اولی حذف بشه .

ممنونتون میمشم استاد

لقمان آوند

اینجور مواقع باید خودتون الگوریتمشو در بیارید. خدمت شما :

function myArrayDiff($arr1,$arr2){
	$ar2Ids = array();
	foreach($arr2 as $a2){
		$ar2Ids[] = $a2[‘id’];
	}

	$resultArr = array();
	foreach($arr1 as $a1){
		if(!in_array($a1[‘id’],$ar2Ids)){
			$resultArr[] = $a1;			
		}
	}
	return $resultArr;
}

$arr1 = array(
	array(‘id’=> 1 , ‘title’=> “title1”,’hex’=> “h1”),
	array(‘id’=> 2 , ‘title’=> “title2”,’hex’=> “h2”),
	array(‘id’=> 3 , ‘title’=> “title3”,’hex’=> “h3”),
	array(‘id’=> 4 , ‘title’=> “title4”,’hex’=> “h4”),
);
$arr2 = array(
	array(‘id’=> 1 , ‘title’=> “title1”,’hex’=> “h1”),
	array(‘id’=> 3 , ‘title’=> “title3”,’hex’=> “h3”),
);

$myDiff = myArrayDiff($arr1,$arr2);
print_r($myDiff);
ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.