دسته بندی
آرایه (Array) در برنامه نویسی PHP
در مباحث گذشته از بخش آموزش مقدماتی PHP با نحوه کار حلقه foreach آشنا شدیم و گفتیم که این نوع حلقه ها برای مدیریت آرایه (Array) کاربرد دارد به طور مثال مقادیری که از فرم های وب با قابلیت انتخاب چندگانه (multiple) ارسال می شوند را می توانیم در حلقه foreach مورد به مورد بررسی و به پارامترهای آن دسترسی داشته باشیم که این ساز و کار به کمک آرایه محقق می شود، به هر صورت این بار و در ادامه آموزش های مقدماتی می خواهیم دانشمان را در برنامه نویسی PHP کمی بیشتر توسعه داده و مبحث آرایه ها را با هم بررسی کنیم، فراگیری کامل و درست این مبحث می تواند درک ما را از نحوه کار کدهای PHP و ساختار ببرنامه های وب بسیار ارتقاء داده و در خیلی از پروژه ها راهگشا باشد.
آرایه (Array) چیست؟
آرایه (Array) در برنامه نویسی به ساختار داده ای به شکل متغیر یا آبجکت گفته می شود که خود شامل عناصر (Elements) زیرمجموعه به شکل لیست است که می توانیم با شماره عددی خودکار (Index) یا کلید (Key) اختصاصی به مقدار (Value) آنها دسترسی داشته باشیم، بنابراین در مورد آرایه ها با چند اصطلاح زیر روبرو خواهیم شد:
- Array: آرایه ای که تعریف می کنیم.
- Element: به هر عضو در آرایه عنصر یا Element گفته می شود.
- Index: به موقعیت عددی خودکار عنصر در فهرست عناصر آرایه ایندکس گفته می شود و با آن به مقادیر عنصر مورد نظر دسترسی پیدا می کنیم.
-Key: کلید اختصاصی که به صورت غیرخودکار تعیین می شود و با آن به مقادیر عنصر مورد نظر دسترسی پیدا می کنیم.
Value: مقداری که هر عنصر آرایه در خود نگهداری می کند.
بر این اساس اگر آرایه ما در PHP به شکل نمونه زیر باشد:
<?php
$array = array('HTML', 'CSS', 'JS', 'PHP');
?>
در این ساختار عبارت array اول متغیر آرایه، array دوم دستور تعریف آرایه و عبارت های رشته ای HTML، CSS، JS و PHP که با کاراکتر کاما (,) از هم جدا شده اند هرکدام عناصر آرایه هستند، ایندکس ها در این شیوه به صورت خودکار و از 0 شمارش می شوند (آرایه در زبان PHP به صورت Zero-based است) که در نمونه کد قابل روئیت نیست اما در هنگام دسترسی به مقادیر عناصر به کار می آید، به طور مثال اگر بخواهیم مقادیر Index 3 آرایه بالا را استخراج و در خروجی چاپ کنیم می توانیم با کد زیر این کار را انجام دهیم:<?php
$array = array('HTML', 'CSS', 'JS', 'PHP');
echo $array[3];
?>
که نتیجه عبارت PHP
خواهد بود، دقت کنیم ایندکس و کلید دو مفهوم مشابه هستند با این تفاوت که ایندکس (Index) در حالتی استفاده می شود که شماره گذاری موقعیت عناصر به صورت خودکار و عددی (از 0) توسط مفسر انجام شده باشد اما کلید (Key) زمانی است که کلیدواژه دسترسی به عنصر را به صورت عددی یا با در نظر گرفتن برچسب متنی خودمان تعیین می کنیم، به طور مثال در نمونه کد زیر استفاده از ایندکس 3 خطا خواهد داشت:<?php
$array = array(0 => 'HTML', 1 => 'CSS', 2 => 'JS', 5 => 'PHP');
echo $array[3];
?>
کد بالا خطایNotice: Undefined offset: 3
را چاپ می کند چون ایندکس 3 در آرایه وجود ندارد و برای چاپ عبارت PHP باید از کلید 5 استفاده کنیم:echo $array[5];
در واقع می توان گفت زمانی که به صورت دستی شماره ایندکس عناصر آرایه را تغییر می دهیم اصطلاح کلید (Key) جانشین فهرست (Index) می شود، به طور خلاصه فهرست (Index) شماره گذاری خودکار و کلید (Key) می تواند مقدار عددی یا متنی باشد که هر دو اصطلاح برای دسترسی به مقدار (Value) عناصر آرایه کاربرد دارند.شیوه های مختلف تعریف آرایه در PHP
آرایه در PHP مشابه دیگر زبان مرتبط با وب یعنی جاوا اسکریپت به دو شیوه زیر قابل تعریف است:
- تعریف آرایه با عبارت دستوری array، به طور مثال:
<?php
$array = array(100, 200, 300);
?>
- تعریف آرایه با کاراکتر قلاب []، به طور مثال:<?php
$array = [100, 200, 300];
?>
نتیجه هر دو روش بالا از نظر فنی یکسان است و صرفا در نحوه تعریف و Syntax تفاوت وجود دارد، در ادامه هر دو روش بالا را به تفصیل بررسی می کنیم.تعریف آرایه در PHP با عبارت دستوری array
اولین روش تعریف آرایه در PHP استفاده از عبارت دستوری array است، در این حالت کلیدها و مقادیر (Key/Value) را می توانیم با علامت پیکان (<=) به صورت جفتی در نظر بگیریم یا اینکه صرفا مقادیر آرایه را با کاراکتر کاما (,) از هم متمایز کرده و ایندکس گذاری خودکار را به مفسر PHP واگذار کنیم، به طور مثال:
<?php
$array_1 = array('A' => 100, 'B' => 200, 'C' => 300);
echo $array_1['B'] . '<br>';
$array_2 = array(100, 200, 300);
echo $array_2[2];
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:200
300
در آرایه اول برچسب مقادیر به صورت سفارشی و با کاراکترهای متنی (A,B,C) انجام شده است که در این حالت از اصطلاح کلید (Key) استفاده می کنیم، به فرض مقادیر کلید A در آرایه array_1 برابر با 100 است، اما در آرایه دوم شماره گذاری به صورت خودکار و از 0 انجام می شود (اشاره شد که آرایه ها در PHP از 0 شماره گذاری می شوند و به اصطلاح Zero-based هستند)، در این حالت از اصطلاح ایندکس (Index) استفاده می کنیم به فرض مقادیر ایندکس 1 آرایه array_2 برابر با 200 است.نکته: زبان برنامه نویسی PHP برخلاف جاوا اسکریپت (JavaScript) به صورت ذاتی از آرایه های با کلید متنی (Associative Array) پشتیبانی می کند و نیازی به تعریف آبجکت ثابت (Literal Object) جداگانه نیست.
تعریف آرایه در PHP با کاراکتر قلاب []
شیوه دوم تعریف آرایه که به حالت مختصرنویسی نیز معروف است استفاده از کاراکتر قلاب [] (یا Square Bracket) است که در این حالت هم می توانیم با یا بدون استفاده از کلیدهای سفارشی آرایه مورد نظر را تعریف کنیم، به طور مثال:
<?php
$array_1 = ['A' => 100, 'B' => 200, 'C' => 300];
echo $array_1['B'] . '<br>';
$array_2 = [100, 200, 300];
echo $array_2[2];
?>
خروجی نمونه کد بالا نیز به صورت زیر خواهد بود:200
300
اینکه در کدنویسی از چه شکلی از تعریف آرایه استفاده کنیم بستگی به موقعیت و گاهی سلیقه برنامه نویس دارد، روش array قدیمی تر است و از زمان پیدایش PHP معرفی شده است اما روش قلاب جدیدتر است و از نسخه 5.4 به مفسر PHP اضافه شده است، در هر صورت ممکن است در موارد محدودی کدنویسی برخی برنامه ها صرفا از یک روش خاص پشتیبانی کنند.تعریف آرایه های دو یا چندبعدی (Multidimensional) در PHP
استفاده از آرایه ها در کدنویسی برنامه های وب به حالت ساده و تک بعدی محدود نمی شود، گاهی مواقع مقدار هر کلید می تواند خود یک آرایه (آرایه آرایه یا Array of Array) باشد و این شیوه ممکن است تا چند سطح عمق پیدا کند که در این حالت از اصطلاح آرایه چند بعدی (Multidimensional) استفاده می کنیم، اصول تعریف و دسترسی به عناصر آرایه در این شیوه ها نیز مشابه با حالت تک بعدی است که در ادامه با چند مثال بررسی می کنیم.
- مثالی از آرایه دوبعدی در PHP:
<?php
$array_1 = ['A' => array(10, 20, 30), 'B' => array(40, 50, 60), 'C' => array(70, 80, 90)];
echo $array_1['B'][1];
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:50
- مثالی از آرایه چندبعدی در PHP:<?php
$array_1 = [array([10, 20, 30], [40, 50, 60]), 56, 78];
echo $array_1[0][0][0];
echo '<br>';
echo $array_1[1];
?>
خروجی نمونه کد بالا به صورت نمونه زیر خواهد بود:<?php
$array_1 = [array([10, 20, 30], [40, 50, 60]), 56, 78];
echo $array_1[0][0][0];
echo '<br>';
echo $array_1[1];
?>
در این نمونه کد برای تعریف آرایه و عناصر زیرمجموعه آن از روش های مختلف (عبارت دستوری array و کاراکتر قلاب []) استفاده کرده ایم.نکته: گفتیم که PHP به صورت ذاتی از آرایه هایی که کلید متنی یا سفارشی داشته باشند (Associative Array) پشتیبانی می کند.
افزودن یا حذف عنصر آرایه در PHP
در مثال های بالا با نحوه دسترسی به عناصر آرایه به روش ایندکس (Index) و کلید (Key) آشنا شدیم، اما اگر بخواهیم یک عنصر را در مرحله دیگری از برنامه به آرایه اضافه یا برعکس اگر بخواهیم عنصری را از آرایه حذف کنیم چاره چیست؟
در اغلب زبان های برنامه نویسی برای اینگونه موارد توابع اختصاصی جداگانه ای تعریف می شود و ما هم در ادامه این سری از آموزش ها توابع کار با آرایه در PHP را بررسی خواهیم کرد منتها حذف و اضافه ساده نیازی به استفاده از تابع اختصاصی ندارد و به صورت زیر انجام می شود.
برای افزودن یک عنصر به آرایه بعد از مرحله تعریف کافی است از روش نمونه زیر پیروی کنیم:
<?php
$array_1 = ['A', 'B', 'C'];
$array_1[] = 'D';
echo $array_1[3];
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:D
اگر با دستور print_r از آرایه array_1 خروجی بگیریم خواهیم داشت:Array ( [0] => A [1] => B [2] => C [3] => D )
همان طور که مشخص است از شیوه شماره گذاری خودکار (Index) در این حالت استفاده شده است، یک مثال از شیوه اختصاص کلید (Key) سفارشی:<?php
$array_1 = [22 => 'A', 13 => 'B', 57 => 'C'];
$array_1['14'] = 'D';
echo $array_1['14'];
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:D
اگر با دستور print_r از آرایه array_1 خروجی بگیریم خواهیم داشت:Array ( [22] => A [13] => B [57] => C [14] => D )
در حالت کلیدهای سفارشی رعایت ترتیب کلیدها اهمیتی ندارد.برای حذف یک عنصر از آرایه نیز تابع عمومی unset به روش زیر قابل استفاده است:
<?php
$array_1 = [22 => 'A', 13 => 'B', 57 => 'C'];
unset($array_1[22]);
print_r($array_1);
?>
نتیجه اجرای نمونه کد بالا به صورت زیر خواهد بود:Array ( [13] => B [57] => C )
برای حذف عنصر مورد نظر از آرایه کافی است در تابع unset آرایه را به همراه کلید متناظر به عنوان آرگیومنت تنظیم کنیم، همین روش برای حالت ایندکس خودکار نیز کاربرد خواهد داشت، مثال:<?php
$array_1 = ['A', 'B', 'C'];
unset($array_1[0]);
print_r($array_1);
?>
نتیجه اجرای نمونه کد بالا به صورت زیر خواهد بود:Array ( [1] => B [2] => C )
نکته مهم اینکه با حذف عنصر از آرایه با تابع unset چینش کلیدها تغییری نمی کند.استفاده از آرایه ها در حلقه foreach
در مفسر PHP حلقه foreach به صورت ذاتی و پیش فرض برای دسترسی به عناصر آرایه ها در دور تکرار تعریف شده است که در آموزش های مرتبط با انواع حلقه (Loop) به اختصار در این خصوص صحبت کردیم، با حلقه foreach می توانیم به فرض اطلاعات ارسال شده از فرم های HTML که فیلدهایی با قابلیت چندگانه (Multiple) دارند را تجزیه کرده و آیتم به آیتم عناصر آرایه ارسالی را مورد پردازش قرار دهیم، به طور مثال اگر فرم HTML زیر را داشته باشیم:
<form action="#" method="post">
<label for="country">انتخاب کشور:</label>
<select name="country[]" id="country" multiple="multiple">
<option value="Iran">Iran</option>
<option value="Germany">Germany</option>
<option value="Japan">Japan</option>
</select>
<input type="submit" value="ارسال">
</form>
در این فرم فیلد انتخاب شونده با نام فرضی country قابلیت چندگانه (Multiple) دارد و کاربر می تواند با نگه داشتن کلید Ctrl از بین option های موجود یک یا چند مورد را انتخاب و ارسال کند، با دقت در کدنویسی فرم HTML مشخص است که کاراکتر قلاب [] و عبارت multiple به فیلد country اضافه شده اند، در این حالت اطلاعات فیلد مورد نظر به صورت آرایه به سرور ارسال می شود اما در سمت سرور این آرایه را به چه نحوی مدیریت و به عناصر آن دسترسی پیدا کنیم؟پاسخ حلقه foreach است به طور مثال:
<?php
@$country = $_POST['country'];
foreach($country as $key => $value){
echo $value . '<br>';
}
?>
به این صورت اگر کاربر تمام موارد را انتخاب کند خروجی به شکل زیر خواهد بود:Iran
Germany
Japan
با حلقه for هم می توانیم به عناصر آرایه در دور تکرار دسترسی داشته باشیم اما حلقه for به طور ذاتی برای کار با آرایه ها تعریف نشده و باید هنگام گرفتن خروجی ایندکس/کلید مورد نظر را تعیین کنیم، به طور مثال:<?php
@$country = $_POST['country'];
$count = count($country);
for($i = 0; $i < $count; $i++){
echo $country[$i] . '<br>';
}
?>
کد بالا خروجی مشابه حلقه foreach خواهد داشت.توجه کنیم در حالت for ایندکس/کلید آرایه به صورت داینامیک و در هر دور حلقه متغیر است، در واقع ایندکس/کلید همان مقادیر متغیر i است که در هر دور حلقه یک واحد افزایش می یابد و حلقه نیز تا جایی که مقادیر i از تعداد عناصر آرایه که با تابع count محاسبه شده کوچکتر باشد ادامه می یابد.
در آموزش های بعدی با توابع کار با آرایه (Array Functions) که با تنوع و تعداد زیاد در مفسر PHP وجود دارند آشنا خواهیم شد.
دسته بندی: آموزش مقدماتی » PHP
برچسب ها: PHP
مطالب بیشتر:
عملگرها (Operators) در PHP
تعریف و استفاده از متغیر (Variable) در PHP
توابع کار با آرایه در PHP - بخش اول
دستور switch و case در PHP
توابع (Functions) در PHP
عملگرها (Operators) در PHP
تعریف و استفاده از متغیر (Variable) در PHP
توابع کار با آرایه در PHP - بخش اول
دستور switch و case در PHP
توابع (Functions) در PHP
دیدگاه
۵۲ دیدگاه برای این مطلب ارسال شده است.
دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
مومني موگويي
۰۴:۲۸ ۱۳۹۲/۰۸/۰۶
سلام خسته نباشيد بنده ميخواستم كاربرد تابع str_word_count رو بدونم البته بنده مي دونم كه اين تابع تعداد كلمات يك رشته برميگردونه، چيزي كه مي خواستم بدونم اينكه توي كتاب خوندم كه سه تا آرگومنت دريافت مي كنه مي خواستم اين نوع كاربردشو با مثال بدونم با تشكر خسته نباشيد از اينكه به سوالاتمون جواب ميدين يك دنيا ممنون
- آرگیومنت اول این تابع همان رشته ای است که بررسی می شود.
- آرگیومنت دوم با اعداد 0، 1 و 2 تعیین کننده نوع و شمول خروجی تابع است:
0 نتیجه تابع را به صورت عددی (تعداد کلمات) بر می گرداند.
1 نتیجه را به صورت آرایه (شروع کلیدها از صفر و مقادیر شامل کلمات) بر می گرداند.
2 نتیجه را به صورت آرایه (شمارش کلید ها بر اساس موقعیت کلمه در رشته و مقادیر شامل کلمات) بر می گرداند.
- آرگیومنت سوم کاراکترهای دلخواهی است که اگر ست شوند، جزئی از کلمه به حساب می آیند و در خروجی دیده می شوند.
مثال:
- آرگیومنت دوم با اعداد 0، 1 و 2 تعیین کننده نوع و شمول خروجی تابع است:
0 نتیجه تابع را به صورت عددی (تعداد کلمات) بر می گرداند.
1 نتیجه را به صورت آرایه (شروع کلیدها از صفر و مقادیر شامل کلمات) بر می گرداند.
2 نتیجه را به صورت آرایه (شمارش کلید ها بر اساس موقعیت کلمه در رشته و مقادیر شامل کلمات) بر می گرداند.
- آرگیومنت سوم کاراکترهای دلخواهی است که اگر ست شوند، جزئی از کلمه به حساب می آیند و در خروجی دیده می شوند.
مثال:
<?php
$str = 'Hello World! Welcome to PHP Learning...';
echo str_word_count($str, 0);
echo '<br>';
print_r(str_word_count($str, 1));
echo '<br>';
print_r(str_word_count($str, 2, '!.'));
?>
خروجی:6
Array ( [0] => Hello [1] => World [2] => Welcome [3] => to [4] => PHP [5] => Learning )
Array ( [0] => Hello [6] => World! [13] => Welcome [21] => to [24] => PHP [28] => Learning... )
محمد
۱۰:۰۰ ۱۳۹۲/۰۸/۱۰
ببخشید مزاحم میشم
من می خواستم یک آرایه ی دو بعدی را مقدار دهی کنم اما روش آن به ذهنم نمی رسد در اینترنت فقط مثال هایی از آرایه های انجمنی به صورت دستی وجود دارد مشکل من خروجی گرفتن نیست فقط نمی دانم چه طور مقدار دهی کنم البته تا حد زیادی کد را نوشته ام و فقط یک مشکل کوچک وجود دارد
کد من:
می خواستم کمی راهنمایی کنید
با آرزوی موفقیت برای شما دوست عزیر
متشکرم و خداحافط
من می خواستم یک آرایه ی دو بعدی را مقدار دهی کنم اما روش آن به ذهنم نمی رسد در اینترنت فقط مثال هایی از آرایه های انجمنی به صورت دستی وجود دارد مشکل من خروجی گرفتن نیست فقط نمی دانم چه طور مقدار دهی کنم البته تا حد زیادی کد را نوشته ام و فقط یک مشکل کوچک وجود دارد
کد من:
<?php
$student = array
(
array("2",20),
array("3",17),
array("8",19)
);
echo "student id:".$student[0][0]." student number:".$student[0][1]."<br>";
echo "student id:".$student[1][0]." student number:".$student[1][1]."<br>";
echo "student id:".$student[2][0]." student number:".$student[2][1]."<br>";
///////////////////////////////////////////////////////////////////////////
for($i=0;$i<=10;$i++)
{
for($j=0;$j<=1;$j++)
{
$student[$i][$j]=1;
}
}
echo "student id:".$student[0][0]." student number:".$student[0][1]."<br>";
echo "student id:".$student[1][0]." student number:".$student[1][1]."<br>";
echo "student id:".$student[2][0]." student number:".$student[2][1]."<br>";
?>
من در قسمت دوم کد توسط دو تا حلقه ای که گذاشتم تونستم پیمایش کاملی داشته باشم اما نمی توانم برای هر خانه از آرایه یک مقدار به خصوص وارد کنم و خروجی آرایه ی دوم مثلاً 1 میشهمی خواستم کمی راهنمایی کنید
با آرزوی موفقیت برای شما دوست عزیر
متشکرم و خداحافط
حلقه ای که نوشتید به صورتی عمل می کند که value برای تمام کلیدها برابر 1 می شود، آرایه اصلی:
دور اول:
Array
(
[0] => Array
(
[0] => 2
[1] => 20
)
[1] => Array
(
[0] => 3
[1] => 17
)
[2] => Array
(
[0] => 8
[1] => 19
)
)
چند دور از حلقه شما:دور اول:
for($i=0;$i<=10;$i++){
for($j=0;$j<=1;$j++){
$student[0][0]=1;
$student[0][1]=1;
}
}
دور دوم:for($i=1;$i<=10;$i++){
for($j=0;$j<=1;$j++){
$student[1][0]=1;
$student[1][1]=1;
}
}
و تا 10 به همین منوال خواهد بود.مومني موگويي
۰۵:۰۸ ۱۳۹۲/۰۸/۱۱
سلام بسيار ممنون از لطفتون
محمد
۱۸:۱۲ ۱۳۹۴/۰۲/۲۸
سلام خسته نباشید میخواستم بدونم چطور میشه در آرایه یک شی قرار داد و همچنین تعداد شی داخل این آرایه وابسته به تعداد رکوردهای موجود در دیتابیس باشه؟
شی نیز مانند یک متغیر عادی می تواند به عنوان کلید یا مقدار آرایه قرار گیرد، به عنوان مثال:
<?php
class Test{
public $my_str;
public $my_int;
public $my_array;
public function example(){
$this->my_array = array(
0 => $this->my_str,
1 => $this->my_int
);
}
}
?>
در مورد بخش دوم سوال باید آرایه خود را به صورت داینامیک و در حلقه while (در هنگام استخراج اطلاعات دیتابیس) بسازید، یک مثال ساده صرفا جهت راهنمایی (در حلقه for):@$my_array = array();
for ($i = 0; $i < 5; $i++){
$my_array[] = array($i);
}
محمد
۱۸:۳۶ ۱۳۹۴/۰۲/۲۹
خیلی ممنون بابت پاسخگوییتون کدی که من نوشتم به این شکل زیر هست اما میخوام به اندازه تمام رکوردهایی که توی دیتابیس دارم n تا شی ساخته بشه که سه تا پارامتر میفرسه به کلاس خودش که کلاس چیز خاصی جز سه تا متغیر و یک سازنده نداره اما مشکلی که هست توی کد من فقط داره یک شی ساخته میشه و نمیدونم باید چطوری تعداد اشیا رو داینامیک کنم
$sq = mysql_query("SELECT * FROM product");
require_once('../class/Product.php');
while($res = mysql_fetch_assoc($sq)){
$id = $res['product_id'];
$name = $res['product_name'];
$price = $res['price'];
$products = new Product($id,$name,$price);
}
دقیقا مشخص نیست هدفتان از این کار چیست، اما می توانید ساختار کدهایتان را اصولی تر طراحی کنید، ایجاد و فراخوانی کلاس به این صورت صحیح نیست، هدف از کلاس معمولا ایجاد حداقلی و فراخوانی به دفعات زیاد با پارامترهای متفاوت است، نه ایجاد چندین کلاس مشابه مختلف، لذا می توانید نتایج را به صورت آرایه در حلقه ایجاد کنید و در نهایت در بیرون از حلقه، پارامترها را به صورت آرایه به کلاس خود بفرستید، در کلاس با حلقه های for و... می توانید عملیات مورد نظر را روی عناصر آرایه انجام دهید (قاعدتا نیازمند تسلط بر بحث آرایه ها و همچنین برنامه نویسی شی گراء در PHP است).
<?php
class Product{
public $my_array;
public function process(){
for($i = 0; $i < count($this->my_array); $i++){
echo $this->my_array[$i]['id'];
echo $this->my_array[$i]['name'];
}
}
}
@$array = array();
$loop = 0;
while($res = mysql_fetch_assoc($sq)){
$array[$loop]['id'] = $res['product_id'];
$array[$loop]['name'] = $res['product_name'];
$loop++;
}
$products = new Product();
$products->my_array = $array;
$products->process();
?>
۱۵:۴۸ ۱۳۹۴/۰۳/۱۸
با سلام و تشکر از سایت خوبتون.
می خواستم بدونم اگر بخوایم یه سری textbox رو به این روش در دیتابیس sql ثبت کنیم چه میشه کرد؟
کدی که مد نظرمه اینه که اول یک مقداری از یک تکست باکس میگیریم و بعد با حلقه while به اندازۀ اون، در یک صفحۀ جدید، تکست باکس چاپ می کنیم. اسم تکست باکس رو هم به صورت متغیر تعریف می کنیم که اسم ها یکی نباشند. حالا می خواهم تمامی مقادیر تکست باکس های تولید شده توسط حلقۀ while جمع آوری بشه و در SQL ثبت بشه. تنها مشکلم با گرفتن اطلاعات از این فرم هاست.
ممنون می شم راهنماییم کنید.
کد:
می خواستم بدونم اگر بخوایم یه سری textbox رو به این روش در دیتابیس sql ثبت کنیم چه میشه کرد؟
کدی که مد نظرمه اینه که اول یک مقداری از یک تکست باکس میگیریم و بعد با حلقه while به اندازۀ اون، در یک صفحۀ جدید، تکست باکس چاپ می کنیم. اسم تکست باکس رو هم به صورت متغیر تعریف می کنیم که اسم ها یکی نباشند. حالا می خواهم تمامی مقادیر تکست باکس های تولید شده توسط حلقۀ while جمع آوری بشه و در SQL ثبت بشه. تنها مشکلم با گرفتن اطلاعات از این فرم هاست.
ممنون می شم راهنماییم کنید.
کد:
حذف شد
برای این کار باید از input چندگانه (multiple) استفاده کنید (در این حالت تمام فیلدها یک نام دارند + علامت [])، به طور مثال:
<input type="text" id="user-1" name="user[]" value="">
<input type="text" id="user-2" name="user[]" value="">
<input type="text" id="user-3" name="user[]" value="">
و در سمت سرور پارامترها به صورت آرایه از طریق متد POST قابل دریافت و استفاده هستند، به فرض:<?php
$my_array = $_POST['user'];
$loop = 1;
foreach($my_array as $key => $value){
echo 'input-'.$loop.' => '.$value.'<br>';
$loop++;
}
?>
amin
۱۴:۰۹ ۱۳۹۴/۰۴/۰۷
سلام و خسته بناشید خدمت شما
وقتی میخوام از شرط if در ارایه به شکل زیر استفاده کنم دستور if نادیده گرفته میشه
لطفا راهنمایی کنید مشکل کجاست
وقتی میخوام از شرط if در ارایه به شکل زیر استفاده کنم دستور if نادیده گرفته میشه
لطفا راهنمایی کنید مشکل کجاست
global $db;
$tmp = Array();
$db->sql_query("SELECT * FROM `category` WHERE `id`= '5' ");
while($top_sd = $db->sql_fetcharray())
{
$tmp[] = $top_sd;
}
foreach($tmp AS $top_sd)
{
if($db->sql_query("SELECT * FROM `posts` WHERE `ID`= '".$top_sd['id']."' AND `name` = '".$top_sd['name']."' ") > 0){
$top = $db->sql_fetcharray();
$name = $top['name'];
echo $name;
}else{ }
}
باتشکرباید ببینید قسمت زیر چه نتیجه ای برمیگرداند:
نکته: برای تست و خطایابی می توانید دستورات بالا را به یک متغیر نسبت داده و با echo از مقدار متغیر خروجی بگیرید.
$db->sql_query("SELECT * FROM `posts` WHERE `ID`= '".$top_sd['id']."' AND `name` = '".$top_sd['name']."' ")
قاعدتا این نتیجه باید یک عدد باشد، در غیر این صورت در این قسمت اشکالی وجود دارد (البته ظاهرا این قسمت باید یک آرایه برگرداند و لذا مقایسه با صفر به نظر صحیح نیست).نکته: برای تست و خطایابی می توانید دستورات بالا را به یک متغیر نسبت داده و با echo از مقدار متغیر خروجی بگیرید.
fatemeh
۱۲:۵۶ ۱۳۹۴/۰۵/۱۳
سلام من نمی دونم چطوری میشه عکس رو داخل آرایه قرار داد (در php). لطفا اگه میشه راهنمایی کنید.
سوال واضح نیست! اگر منظور از عکس، یک رشته متنی است (شامل نام عکس یا هر چیز دیگری)، به راحتی این کار ممکن است که اگر به آموزش دقت کنید، متوجه می شوید.
محمد
۱۲:۵۵ ۱۳۹۴/۰۶/۲۵
سلام خیلی ممنون بابت آموزش هاتون خیلی خیلی خوبن
فقط
اين يعنی چی
فقط
اين يعنی چی
$i++
علامت ++ به معنی یک واحد افزایش است و لذا تکه کد درج شده برای افزایش متغیر i به میزان یک واحد (در هر دور حلقه) است.
chiro
۱۵:۲۷ ۱۳۹۴/۰۸/۱۲
واقعا مرسی ممنون از شما
دست شما درد نکنه
دست شما درد نکنه
بهنام
۰۰:۲۴ ۱۳۹۴/۰۸/۱۳
سلام
عملگرد
عملگرد
$i++
و ++$i
چه تفاوتی با یکدیگر دارند؟در حالت اول ابتدا مقدار فعلی متغیر برگردانده می شود، سپس یک واحد افزایش پیدا می کند، اما در حالت دوم ابتدا متغیر یک مقدار افزایش پیدا می کند، سپس نتیجه برگردانده می شود، مثال و اطلاعات بیشتر:
http://php.net/manual/en/language.operators.increment.php
hadi
۰۲:۴۴ ۱۳۹۴/۱۰/۰۴
درود
چنانچه ما بخواهیم چندین ورودی را در یک تکست باکس قرار دهیم چه باید کرد ؟
من از کد زیر استفاده میکنم ولی چندین تکست باکس می سازه
چنانچه ما بخواهیم چندین ورودی را در یک تکست باکس قرار دهیم چه باید کرد ؟
من از کد زیر استفاده میکنم ولی چندین تکست باکس می سازه
<?php
if ($_POST['sendsms']){
$mobile= $_POST['check'];
$final_ch = NULL;
foreach($mobile as $ch){
$final_ch .= $ch.' ';
}
echo $final_ch."<br/>";
echo '<input name="mobile" value="'.$final_ch.'" type="text"/>';
}
?>
در این صورت باید تنها مواردی در حلقه اضافه شوند که نیاز به تکرار دارند (کد بالا اصلاح شد!).
حسین
۰۲:۰۸ ۱۳۹۴/۱۰/۲۰
سلام میخواستم ببینم مشکل این کد چی هست ؟
اول چک میکنه اگه صفحه id دریافت کنه تایتل رو از دیتابیس فرا میخونه و چاپ میکنه اگر نه تایتل مورد نظر رو چاپ کنه !
قسمت اول انجام میشه ولی اگه id دریافت نکنه else رو چاپ نمیکنه !
اول چک میکنه اگه صفحه id دریافت کنه تایتل رو از دیتابیس فرا میخونه و چاپ میکنه اگر نه تایتل مورد نظر رو چاپ کنه !
قسمت اول انجام میشه ولی اگه id دریافت نکنه else رو چاپ نمیکنه !
$tit = NULL;
if ($post_id) {
$tit = "میلان دانلود | $rle";
}
else {
$tit = "میلان دانلود";
}
این کد در ظاهر هیچ مشکل خاصی ندارد، لذا ایراد باید در قسمت دیگری از برنامه باشد، همچنین برای بررسی وجود id بهتر است از شیوه زیر استفاده کنید:
if(isset($post_id) && $post_id > 0){
}
hadi
۱۰:۱۰ ۱۳۹۴/۱۱/۲۵
درود من از دو جدول در Mysql میخوام اطلاعات لازم را استخراج نموده و به خروجی بفرستم
1. ابتدا آیدی های مرتبط با نام ارسالی که کار میکند
2. ایدی های خروجی را در جدول دیگری با شرط عدم اتمام بررسی و لیست جدیدی را استخراج کنم
نکته گزینه 1 بدون مشکل کار میکند ولی دومی چون شرط آرایه هست نیاز به راهنمایی دارد
نمونه کد:
1. ابتدا آیدی های مرتبط با نام ارسالی که کار میکند
2. ایدی های خروجی را در جدول دیگری با شرط عدم اتمام بررسی و لیست جدیدی را استخراج کنم
نکته گزینه 1 بدون مشکل کار میکند ولی دومی چون شرط آرایه هست نیاز به راهنمایی دارد
نمونه کد:
<?php
// استخراج آیدی های مرتبط با اسم
$query = 'SELECT deal_id FROM `#__enmasse_deal_category` WHERE category_id IN (' . $name . ') ';
$db->setQuery($query);
$row = $db->loadColumn();
if ($db->loadColumn() != ''){
$name= $db->loadColumn();
$final_ch = NULL;
foreach($name as $ch){
$final_ch .=','.$ch;
}
echo $final_ch; // خروجی آیدی ها
}
$thisdate= DatetimeWrapper::getDatetimeOfNow() ; // نمایش زمان جاری
// درخواست بررسی آیدی های خروجی بر اساس تاریخ اتمام
$query = 'SELECT id FROM `#__enmasse_deal` WHERE id IN (' . $final_ch . ') AND end >= ('.$thisdate.')';
$db->setQuery($query);
$row = $db->loadObjectList();
?>
ظاهرا خروجی نهایی که به قسمت IN می دهید به صورت صحیح نیست، به طور مثال این خروجی (متغیر final_ch) باید به صورت زیر باشد:
23, 59, 100
اما با توجه به قسمت foreach خروجی به این صورت ساخته می شود که درست نیست و اولین کاما اضافه است:,23, 59, 100
برای رفع این مشکل می توانید کاما را با شرط به متغیر اضافه کنید، مثال (تست نشده):$final_ch = NULL;
$loop = 0;
foreach($name as $ch){
if($loop > 0){
$final_ch .= ',' . $ch;
}
else{
$final_ch = $ch;
}
$loop++;
}
hadi
۲۳:۰۴ ۱۳۹۴/۱۱/۲۵
درود مجدد و تشکر بابت پاسخ تان در جدول دوم من خروجی بالا که یک آرایه هست را دارم با شرط where تست میکنم آیا کد من صحیح هست یا نیاز به تغییرات دارد شرط بر روی آرایه ها
قسمت پایین کد از لحظه خروجی :
قسمت پایین کد از لحظه خروجی :
}
echo $final_ch; // خروجی آیدی ها
}
$thisdate= DatetimeWrapper::getDatetimeOfNow() ; // نمایش زمان جاری
// درخواست بررسی آیدی های خروجی بر اساس تاریخ اتمام
$query = 'SELECT id FROM `#__enmasse_deal` WHERE id IN (' . $final_ch . ') AND end >= ('.$thisdate.')';
$db->setQuery($query);
$row = $db->loadObjectList();
ابتدا باید اصلاحی که در پاسخ قبل گفته شد انجام دهید، در مورد این سوال باید شیوه های خطایابی در PHP را بلد باشید، به طور مثال باید ببینید در برنامه شما از چه متدی برای نمایش خطاهای احتمالی پرس و جوها استفاده شده، با تکه کد درج شده نمی توان حدس زد که متد مربوط به نمایش خطا در برنامه شما چیست!، اما ظاهرا مشکل Syntax وجود ندارد، نکته دیگر اینکه مقایسه زمان در صورتی صحیح است که هر دو مقدار مقایسه شده به یک صورت (به فرض هر دو عدد صحیح یا هر دو طرف فرمت استاندارد تاریخ و زمان و نوع ستون دیتابیس DATETIME باشد).
آخرین دیدگاه ها
برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
سیدعباسی
با سلام من میخوام از متن زیر لینکش رو دربیارم و در آخر مقدار 3088 رو بصورت خروجی نهایی داشته باشم با...۱۴۰۳/۰۷/۰۷
مجتبی
سلام وقت بخیر میخوام یک روز به تاریخ دریافتی اضافه شه ممنون میشم راهنمایی کنید۱۴۰۳/۰۶/۲۰
پرتو
سلام خوبید؟ خسته نباشیذ ببخشید مزاحم شدم می خواستم بگم من به شما ایمیل زدم ولی هنوز شما جواب ندادین می تونم بپرسم چرا سوال...۱۴۰۳/۰۶/۱۵
در انتظار بررسی: ۰
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.