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

دسته بندی: آموزش
زمان مطالعه: ۲ دقیقه
۰۱ شهریور ۱۳۹۳

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

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

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

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

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

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

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

نویسنده
بیش از 15 سال هست که برنامه نویسی می کنم و از بین همه زبون هایی که کار کردم جاوا، اسمبلی و php رو دوست دارم. دانشجوی دکترای نرم افزارم و توی دانشگاه روی پردازش بیگ دیتا و پردازش موازی کار کردم و عاشق چالش از هر نوعیش هستم! سون لرن مثل بچه منه که 12 سال براش وقت گذاشتم، اینجا همه تلاش می کنیم از شروع یادگیری تا ورود به بازر کار حوزه برنامه نویسی و IT همراهتون باشیم.

جلسات دوره

نظرات کاربران

ppp

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

مشکل من اینه این عکسو ببینید .
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);
Pourya Ariyafar

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

 http://bayanbox.ir/view/8121069528296842138/d3.jpg

ممنون

لقمان آوند

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

حسین محمدی

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

لقمان آوند

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

سیروان

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

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

وحید صالحی

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

mohammad

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

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

لقمان آوند

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

shahriar rad

با سلام و درود

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

لقمان آوند

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

Massud Tarekhi

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

لقمان آوند

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

میلاد رش

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

لقمان آوند

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

Aref Taker

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

لقمان آوند

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

Aref Taker

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

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

لقمان آوند

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

پایان زمان پشتیبانی

دانشجوی گرامی، بازه پشتیبانی فعال برای این دوره ۳ ماه است که برای شما به پایان رسیده است.

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

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.
گزارش مشکل