article

آرایه (Array) در برنامه نویسی PHP

php-array

در مبحث گذشته از بخش آموزش مقدماتی php با نحوه کار foreach که یک نوع از حلقه ها در php است آشنا شدیم و گفتیم که این نوع حلقه برای مدیریت مقادیر به صورت آرایه (Array) کاربرد دارد (به فرض مقادیری که از فرم های وب با قابلیت انتخاب چندگانه یا multiple ارسال می شوند)، اما این بار و در ادامه آموزش های مقدماتی می خواهیم دانشمان را در برنامه نویسی وب با php کمی بیشتر توسعه دهیم و مبحث آرایه ها را با هم بررسی کنیم، فراگیری درست این مبحث می تواند درک ما را از نحوه کار php بسیار ارتقاء دهد و در خیلی از پروژه های مبتنی بر وب، رهگشای ما باشد.

آرایه (Array) چیست؟


آرایه در برنامه نویسی به متغیری گفته می شود که درون خود، می تواند چند متغیر مختلف و با مقادیر متفاوت داشته باشد، همانطور که می دانیم، متغیرها در حالت معمول تنها می توانند یک مقدار مشخص داشته باشند، اما اگر به فرض بخواهیم اطلاعات سنی کارکنان یک شرکت را برای یک پژوهش آماری مورد بررسی قرار دهیم، به شیوه سنتی ناچاریم برای هر نفر یک متغیر بنویسیم و یک مقدار متفاوت نسبت دهیم و در هنگام فراخوانی، مجددا این روند را تکرار کنیم، اما با آرایه این کار بسیار آسان تر می شود، با نوشتن متغیر ها و مقادیر در یک آرایه برای یک بار، می توانیم هر موقع که نیاز بود، در بین کلید ها و مقادیر به دنبال موارد مورد نظر خود باشیم و نتایج را از بین متغیرهای مختلف استخراج کنیم، از این گذشته به طور مثال گاهی نیاز داریم که کاربران سایتمان از بین یک فیلد انتخاب شونده یا select باکس، چند مقدار متفاوت را همزمان انتخاب کنند (شاید نمونه آن را در وب دیده باشید که با نگه داشتن کلید Ctrl این کار انجام می شود)، اگر این مقادیر از فرم html به برنامه php ارسال شوند، تنها از طریق آرایه است که می توانیم آنها را تجزیه کرده و مدیریت کنیم.

شیوه های مختلف تعریف آرایه در php


آرایه را در php همانند دیگر زبان های مرتبط با وب مانند جاوا اسکریپت، می توان به چند صورت تعریف کرد و در کل سه شیوه برای این کار وجود دارد:
- تعریف آرایه ها به صورت کلیدهای عددی و مقدار (Numeric).
در این شیوه هر یک از متغیرهای درونی آرایه با یک کلید عددی  (با استفاده از علامت []) و مقدار، تنظیم می شوند، به طور مثال:
<?php
$page[0] = "Home";
$page[1] = "Learn";
$page[2] = "Buy";
$page[3] = "About";
?>
حال می توانیم با دستور زیر از آرایه بالا خروجی بگیریم، کافی است متغیرها را با کلیدهای خاص آن فراخوانی کنیم:
<?php
echo $page[2];
?>
خروجی کد بالا به صورت زیر خواهد بود:
Buy
همان طور که ملاحظه می کنید، ما از بین متغیرهای مختلف آرایه فرضی page، مقادیر کلید سوم (که با عدد 2 مشخص شده است) را به خروجی ارسال کرده ایم که در مثال بالا، برابر عبارت "Buy" است.
توجه کنید که شمارش در آرایه ها همیشه از صفر شروع می شود نه از یک، اینگونه اشتباهات گاهی باعث می شوند به فرض ساعت ها برای رفع باگ موجود در یک برنامه وقت صرف کنیم، غافل از اینکه یک صفر و یک ناقابل باعث بروز تمام مشکلات بوده اند!
- تعریف آرایه ها به شیوه خطی و مجموعه ای یا شرکت پذیر (Associative).
در این روش برعکس مورد قبل، از شیوه نگارش علامت [] استفاده نمی کنیم، بلکه کلیدها و مقادیر آنها را به صورت یک مجموعه و با کمک دستور array تعریف می کنیم، به طور مثال:
<?php
$page = array(0 => "Home", 1 => "Learn", 2 => "Buy", 3 => "About");
?>
اکنون به همان روشی که در بالا ملاحظه کردیم، می توانیم از این آرایه نیز خروجی بگیریم، در واقع تنها شیوه تعریف و مقداردهی ما فرق کرده است.
<?php
echo $page[0];
?>
خروجی کد بالا به صورت زیر خواهد بود:
Home
در این شیوه، حتی می توان کلیدها را نیز ننوشت و تنها مقادیر را به آرایه نسبت داد، در این صورت کلیدها به صورت خودکار ایجاد می شوند و در دسترس هستند:
<?php
$page = array("Home", "Learn", "Buy", "About");
?>
- تعریف آرایه به شیوه تو در تو و چندبعدی (Multidimensional).
نوع دیگری از تعریف آرایه در php، تعریف آن به شیوه آرایه در آرایه است، یعنی درون یک آرایه، خود چند آرایه دیگر قرار دارد که درون آن آرایه ها ممکن است همین روال وجود داشته باشد، این شیوه ممکن است کمی پیچیده گی کار با آرایه ها را بیشتر کند، اما در مواردی استفاده از آن اجتناب ناپذیر است، به مثال زیر توجه کنید.
<?php
$result = array(
"pages" => array("home","learn","buy"),
"users" => array("maryam","sina","mohammad")
);
?>
مسلما شیوه خروجی گرفتن از آرایه های بالا با آنچه که پیشتر دیدیم متفاوت خواهد بود، در اینجا لازم است که ابتدا متغیر اصلی آرایه را مشخص کنیم، سپس آرایه زیرمجموعه و در نهایت کلید مورد نظر در آن آرایه را، تا مقدار به خروجی ارسال شود:
<?php
echo $result['pages'][1];
?>
به این صورت دستور بالا در بین متغیر فرضی result که عنوان آرایه اصلی ماست و آرایه زیر مجموعه آن با نام pages، کلید دوم (که با عدد 1 دریافت می شود) را به خروجی می دهد، یعنی خروجی برابر خواهد بود با:
learn
در واقع با این شیوه تعریف آرایه، کلیدها به صورت خودکار و درونی ساخته می شوند و نیازی نیست ما به صورت دستی آنها را تعریف کنیم، کافی است مقادیر را به هر آرایه نسبت دهیم و بقیه کار را به مفسر php بسپاریم.
مثال دیگر این بار با نوشتن کلیدها:
<?php
$result = array(
"pages" => array(0 => "home", 1 => "learn", 2 => "buy"),
"users" => array(0 => "maryam", 1 => "sina", 2 => "mohammad")
);
?>
ملاحظه می کنید که بحث آرایه ها در واقع بحث متغیر، کلید و مقدار است، یعنی با درک این سه موضوع تا حدود زیادی می توان با نحوه کار آن آشنا شد.

استفاده از آرایه ها در حلقه foreach


مفسر php به طور ذاتی و از پیش تعریف شده، برای کار با آرایه ها در برنامه نویسی پیشرفته، حلقه ی foreach را در نظر گرفته است، با foreach می توانیم به فرض اطلاعات ارسال شده از یک فرم html که قابلیت انتخاب چندگانه دارد را تجزیه کرده و آیتم به آیتم مورد پردازش قرار دهیم، به طور مثال فرم html زیر را در نظر بگیرید.
<form action="#" method="post">
<select name="country[]" multiple="multiple">
<option value="Asia">Iran</option>
<option value="Europe">Germany</option>
<option value="Asia">Japan</option>
</select>
<input type="submit" value="ارسال" />
</form>
این یک فرم معمولی نیست! در این فرم فیلد انتخاب شونده ما قابلیتی منحصر به فرد دارد، این قابلیت این است که کاربر می تواند با نگه داشتن کلید Ctrl از بین option های موجود یک یا چند مورد را در یک ارسال، انتخاب کند، ملاحظه می کنید که علامت [] و عبارت multiple به حالت عادی فرم های html اضافه شده اند، این کار برای ایجاد یک آرایه از اطلاعات ارسالی است، اما در سمت سرور این آرایه را با چه چیز مدیریت کنیم؟
پاسخ روشن است، با حلقه foreach؛ به مثال زیر توجه کنید:
<?php
$country = $_POST['country'];
foreach ($country as $land){
    echo $land . '<br />';
}
?>
به این صورت اگر کاربر تمام موارد را انتخاب کند، خروجی به شکل زیر خواهد بود:
Asia
Europe
Asia
در واقع این نتیجه را به وسیله حلقه for نیز می توان به دست آورد، اما به دلیل اینکه حلقه for به طور ذاتی برای کار با آرایه ها ساخته نشده است، باید هنگام خروجی، مقادیر کلید مورد نظر خود را نیز به آن بدهیم، به طور مثال:
<?php
$country = $_POST['country'];
$count = count($country);
for($i=0;$i < $count;$i++){
    echo $country[$i] . '<br />';
}
?>
کد بالا نیز مشابه حلقه foreach رفتار خواهد کرد.
توجه کنید که در اینجا، کلید آرایه به صورت داینامیک و در هر دور حلقه ایجاد می شود، در واقع مقادیر کلید، همان مقادیر متغیر i است که در هر دور حلقه افزایش می یابد و حلقه نیز تا جایی که مقادیر i از تعداد آرایه ها که با تابع count محاسبه شده اند، کوچکتر باشد، ادامه می یابد.
بحث آرایه ها به آنچه گفتیم ختم نمی شود، در php برای کار با آرایه ها توابع درونی زیادی وجود دارد که در ادامه آموزش های مقدماتی و در مطالب آینده در رابطه با آن بیشتر خواهیم گفت.
sectionدسته بندی: آموزش مقدماتی » PHP
related مطالب بیشتر:
» آموزش برنامه نویسی وب با PHP
» توابع کار با آرایه در PHP - بخش اول
» توابع (Functions) در PHP
» توابع کار با آرایه در PHP - بخش دوم
» حلقه for و while در PHP
commentنظرات (۴۰ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: مومني موگويي
زمان: ۰۴:۲۸:۵۰ - تاریخ: ۱۳۹۲/۰۸/۰۶
سلام خسته نباشيد بنده ميخواستم كاربرد تابع str_word_count رو بدونم البته بنده مي دونم كه اين تابع تعداد كلمات يك رشته برميگردونه، چيزي كه مي خواستم بدونم اينكه توي كتاب خوندم كه سه تا آرگومنت دريافت مي كنه مي خواستم اين نوع كاربردشو با مثال بدونم با تشكر خسته نباشيد از اينكه به سوالاتمون جواب ميدين يك دنيا ممنون
پاسخ: 
سلام
- آرگومان اول این تابع همان رشته ای است که بررسی می شود.
- آرگومان دوم با اعداد 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 به همین منوال خواهد بود.
نویسنده: مومني موگويي
زمان: ۰۵:۰۸:۵۲ - تاریخ: ۱۳۹۲/۰۸/۱۱
سلام بسيار ممنون از لطفتون
نویسنده: محمد
زمان: ۱۸:۱۲:۵۹ - تاریخ: ۱۳۹۴/۰۲/۲۸
سلام خسته نباشید میخواستم بدونم چطور میشه در آرایه یک شی قرار داد و همچنین تعداد شی داخل این آرایه وابسته به تعداد رکوردهای موجود در دیتابیس باشه؟
پاسخ: 
سلام
شی نیز مانند یک متغیر عادی می تواند به عنوان کلید یا مقدار آرایه قرار گیرد، به عنوان مثال:
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();
?>
نویسنده: FaSh
زمان: ۱۵:۴۸:۴۳ - تاریخ: ۱۳۹۴/۰۳/۱۸
با سلام و تشکر از سایت خوبتون.
می خواستم بدونم اگر بخوایم یه سری 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 نادیده گرفته میشه
لطفا راهنمایی کنید مشکل کجاست
    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{ }
}
باتشکر
پاسخ: 
سلام
باید ببینید قسمت زیر چه نتیجه ای برمیگرداند:
$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 رو چاپ نمیکنه !
$tit = NULL;
if ($post_id) {
$tit = "میلان دانلود | $rle";
}
else {
$tit = "میلان دانلود";
}
پاسخ: 
سلام
این کد در ظاهر هیچ مشکل خاصی ندارد، لذا ایراد باید در قسمت دیگری از برنامه باشد، همچنین برای بررسی وجود id بهتر است از شیوه زیر استفاده کنید:
if(isset($post_id) && $post_id > 0){
}
نویسنده: hadi
زمان: ۱۰:۱۰:۵۴ - تاریخ: ۱۳۹۴/۱۱/۲۵
درود من از دو جدول در Mysql میخوام اطلاعات لازم را استخراج نموده و به خروجی بفرستم
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 باشد).
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




2 × 8
 refresh
نکته:
با توجه به تاریخ نگارش آموزش های سایت و پیشرفت تکنولوژی های مرتبط با وب در سالیان اخیر، محتوای برخی از مطالب قدیمی ممکن است نیاز به ویرایش و به روزرسانی داشته باشد که این کار هم زمان با تهیه نسخه جدید «وبگو» به مرور در حال انجام است، لطفا در استفاده از مطالب سایت به این نکته دقت داشته و حتی المقدور از چند منبع مختلف استفاده نمائید.
آخرین دیدگاه ها
form adel
در:
سلام با تشکر از سایت خوب شما. یه سوال داشتم چگونه تمام این کدها را در جاوا اسکریپت همزمان قرار دهیم. من مثلا دستور این...
۲۱:۲۵:۴۰ ۱۳۹۸/۰۸/۲۴

form یه سوال کننده
در:
سلام. ببخشید چطور میشه ایمیل هایی رو میفرستن که ریپلای زدن رو ایمیلی که از طرف ما نبوده بیشتر تو تبلیغات دیدم امیدوارم منظورم و...
۰۳:۲۳:۰۸ ۱۳۹۸/۰۸/۲۴

form پرتو
در:
با عرض سلام و خسته نباشید امیدوارم حالتون خوب باشه من دو سه سال پیش وبلاگم رو حذف کردم ایا امکانش هست برگرده؟ ادرس...
۱۴:۵۵:۵۲ ۱۳۹۸/۰۸/۲۰

form علی
در:
سلام من نمی تونم html tag رو چطور در وبلاگم قرار بدم وبلاگم اینه
tagtak.blog.ir
۱۰:۲۳:۳۴ ۱۳۹۸/۰۸/۲۰

form حمید
در:
سلام. خسته نباشید. من میخاستم استایل فیلدهای فرمم رو تغییر بدم منتهی نمیدونم از چه کدهایی باید استفاده کنم. برای اینکه فرمی به شکل...
۱۰:۳۶:۱۹ ۱۳۹۸/۰۸/۱۹

form سمیه
در:
سلام ممنون بابت آموزش مفیدتون توی تگ ها هرچیزی که در تگ head قرار بگیره نمایش داده نمیشه، اما ممنون میشم...
۲۰:۴۹:۲۳ ۱۳۹۸/۰۸/۱۷

form استادمجازی
در:
سلام. از ادمین عزیز و همگی دعوت می کنم آموزش های خوبتون را بصورت آموزش ویدیویی یا صوتی و... در سایت ostadmajazi.com استادمجازی ...
۲۲:۱۲:۲۳ ۱۳۹۸/۰۸/۱۳

form mohamad
در:
سلام و خسته نباشید ، توی فرمی که ساختم چند تا drop down دارم که میخوام با php براشون شرط بذارم به طوری...
۱۳:۵۱:۳۴ ۱۳۹۸/۰۸/۱۰

form رضا
در:
خسته نباشید این جلسه آخر html بود؟؟؟؟
۰۱:۱۵:۰۷ ۱۳۹۸/۰۸/۱۰

form امیرمحمد
در:
سلام و خسته نباشید استاد بنده میخوام بین دو کد زیر که مشخص کردم رو به دست بیارم
// ---------------------set سلام...
۱۹:۳۰:۵۳ ۱۳۹۸/۰۸/۰۸

form حجت
در:
خیلی ممنونم از لطف شما. اوکی شد.
۱۰:۲۸:۳۵ ۱۳۹۸/۰۸/۰۶

form میلاد
در:
آشنایی نسبی با css, php و ajax دارم و نمیخام از library های موجود در نت استفاده کنم. خواستم با همین متد که انصافا روان...
۲۳:۲۲:۵۵ ۱۳۹۸/۰۸/۰۵

form عرفان
در:
با سلام. مدتی بود که بدلایل مشکلات زیاد نتونستم به وبلاگم رسیدگی کنم ولی وقتی برگشتم میبینم که هزاران بازدید داشتم و همشونم به زبان...
۲۲:۴۹:۴۴ ۱۳۹۸/۰۸/۰۵

form raha
در:
سلام وقتتون بخیر ببخشید علامت @ در کل به چه معناست ممنون میشم پاسخ دهید
۲۰:۱۲:۵۹ ۱۳۹۸/۰۸/۰۵

form میلاد
در:
باسلام تشکر از مطالب روان و پرکاربردتان. در خصوص آموزش مذکور، نحوه و ترفند نمایش محور عمودی در سمت چپ نمودار (مشابه...
۰۲:۳۸:۴۰ ۱۳۹۸/۰۸/۰۵