توابع کار با آرایه در PHP - بخش سوم

در دو مطلب گذشته از بخش آموزش برنامه نویسی PHP، قسمتی از توابع از پیش تعریف شده کار با آرایه را با هم بررسی کردیم، توابعی که هر کدام در شرایط خاصی ممکن است به کارمان بیایند و رهگشا باشند، همچنین پیش از این گفتیم که مبحث آرایه ها جزء کلیدی ترین مباحث در اغلب زبان های برنامه نویسی و به تبع PHP به حساب می آید که درک آن می تواند گامی کلیدی در نوشتن برنامه هایی با ساختار بهتر، پیچیده تر و در عین حال بهینه تر باشد، به جهت اهمیت و گستره کاربرد این مسئله است که توسعه دهنده گان مفسر PHP، توابع از پیش تعریف شده زیادی برای آن در نظر گرفته اند که در ادامه با بخش دیگری از آنها آشنا خواهیم شد.
تابع array_pop
تابع array_pop برای حذف یک کلید و مقدار آن از انتهای آرایه استفاده و سپس مقادیر حذف شده به عنوان خروجی برگردانده می شود، مثال:
<?php
$array = array(1, 2, 3, 4, 5);
$array_pop = array_pop($array);
print_r($array);
echo $array_pop;
?>
که نتیجه دستور print_r برابر خواهد بود با:Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
و نتیجه دستور echo برابر خواهد بود با:5
نکته: در صورتی که آرگومان تابع یک آرایه نباشد، یا آرایه هیچ عضوی نداشته باشد، مقادیر NULL برگردانده می شود.تابع array_product
تابع array_product مجموع حاصل ضرب مقادیر کلید های یک آرایه را برمی گرداند، خروجی می تواند به صورت یک عدد صحیح (integer) یا اعشاری (float) باشد، مثال:
<?php
$array = array(1, 2, 3, 4, 5);
$array_product = array_product($array);
echo $array_product;
?>
که نتیجه برابر 120 خواهد بود (1*2*3*4*5).نکته: نتیجه product برای آرایه های خالی مقادیر 1 خواهد بود.
تابع array_push
تابع array_push برای اضافه کردن یک یا چند مقدار به انتهای آرایه استفاده می شود، حاصل این تابع آرایه ای جدید است که موارد مورد نظر به انتهای آن افزوده شده اند، مثال:
<?php
$array = array(1, 2, 3, 4, 5);
array_push($array, '6', '7');
print_r($array);
?>
خروجی مثال بالا برابر خواهد بود با:Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
)
نکته: در صورتی که آرگومان اول این تابع یک آرایه نباشد، خطایی از نوع E_WARNING دریافت خواهید کرد.تابع array_rand
تابع array_rand برای پیدا کردن کلیدهای اتفاقی در یک آرایه استفاده می شوند، به طور مثال:
<?php
$array = array('HTML', 'CSS', 'JavaScript', 'PHP', 'MySQL');
$array_rand = array_rand($array, 2);
print_r($array_rand);
?>
خروجی مثال بالا به صورت اتفاقی برابر خواهد بود با:Array
(
[0] => 0
[1] => 4
)
نکته: در صورتی که آرگومان دوم این تابع بیشتر از تعداد عناصر آرایه باشد، خطایی از نوع E_WARNING دریافت خواهید کرد.تابع array_reduce
تابع array_reduce در یک دور تکرار، حاصل جمع تمام مقادیر یک آرایه را با استفاده از یک تابع برگشتی (callback function) بر می گرداند، در صورتی که آرگومان سوم این تابع تنظیم شده باشد، به عنوان آرگومان اول تابع برگشتی عمل می کند، مثال های زیر می توانند به درک نحوه عملکرد تابع array_reduce کمک کنند.
<?php
function CallBack($result, $item){
$result += $item;
return $result;
}
$array = array(1, 2, 3, 4, 5);
$a = array_reduce($array, "CallBack");
//1 + 2 + 3 + 4 + 5
echo $a;
?>
خروجی دستور echo برابر 15 خواهد بود.مثالی دیگر:
<?php
function CallBack($result, $item){
$result -= $item;
return $result;
}
$array = array(1, 2, 3, 4, 5);
$a = array_reduce($array, "CallBack", 20);
//20 - (1 + 2 + 3 + 4 + 5)
echo $a;
?>
خروجی دستور echo برابر 5 خواهد بود.تابع array_replace
تابع array_replace مقادیر آرایه اول (آرگومان اول) را با مقادیر مشابه آرایه یا آرایه های دیگر (آرگومان دوم، سوم و...) جایگزین می کند، اگر یک کلید در آرایه اول و دوم وجود داشته باشد، مقادیر آن در آرایه اول با مقادیر موجود در آرایه دوم جایگزین می شود، مثال زیر می تواند به درک نحوه کارکرد این تابع کمک کند.
<?php
$array_1 = array('HTML' => 3, 'JavaScript' => 5, 'PHP' => 2, 'AJAX' => 8, 'JAVA' => 4);
$array_2 = array('Python' => array(1, 3, 5), 'Ruby' => 6, 'MySQL' => array(7, 2, 0), 'JavaScript' => 9, 'JAVA' => 3);
$result = array_replace($array_1, $array_2);
print_r($result);
?>
خروجی مثال بالا به صورت زیر خواهد بود.Array
(
[HTML] => 3
[JavaScript] => 9
[PHP] => 2
[AJAX] => 8
[JAVA] => 3
[Python] => Array
(
[0] => 1
[1] => 3
[2] => 5
)
[Ruby] => 6
[MySQL] => Array
(
[0] => 7
[1] => 2
[2] => 0
)
)
با دقت در مثال بالا متوجه می شویم که کلید JavaScript و JAVA با دومین مقدار مشترک به خروجی فرستاده شده.نکته 1: تابع array_replace از نسخه PHP 5 >= 5.3.0 افزوده شده.
نکته 2: تابعی دیگری مشابه این تابع با نام array_replace_recursive وجود دارد که در برخی حالت ها، خروجی متفاوتی ایجاد می کند.
تابع array_reverse
تابع array_reverse برای تغییر چینش عناصر یک آرایه به صورت معکوس به کار می رود، در صورتی که آرگومان دوم این تابع (با مقادیر TRUE) تنظیم شود، چینش کلیدها نیز تغییر می کنند، مثال:
<?php
$array = array(1, 2, 3, 4, 5);
$result = array_reverse($array, true);
print_r($result);
?>
خروجی مثال بالا به صورت زیر خواهد بود.Array
(
[4] => 5
[3] => 4
[2] => 3
[1] => 2
[0] => 1
)
تابع array_search
تابع array_search برای به دست آوردن یک کلید از آرایه بر مبنای مقادیر متناظر آن به کار می رود، در واقع آرگومان در اینجا یک مقدار است که این تابع با جستجو در آرایه، کلید متناظر با آن را (در صورت پیدا شدن) برمی گرداند، مثال:
<?php
$array = array('HTML', 'PHP', 'MySQL');
$result = array_search('PHP', $array);
echo $result;
?>
که خروجی برابر 1 خواهد بود.نکته: در صورتی که آرگومان سوم این تابع (با مقادیر TRUE) تنظیم شده باشد، جستجو به صورت strict یا سختگیرانه انجام شده که در این حالت مواردی مانند نوع داده ها (int, string و...) نیز باید کاملا یکسان باشد.
تابع array_shift
تابع array_shift برای حذف یک کلید و مقدار آن از ابتدای آرایه استفاده می شود، خروجی این تابع (مانند تابع array_pop) آرایه ای جدید است، مثال:
<?php
$array = array(1, 2, 3, 4, 5);
$array_shift = array_shift($array);
print_r($array);
echo $array_shift;
?>
که نتیجه دستور print_r برابر خواهد بود با:Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 5
)
و نتیجه دستور echo برابر خواهد بود با:1
تابع array_slice
تابع array_slice برای تجزیه یک آرایه و دریافت قسمت خاصی از آن به عنوان خروجی استفاده می شود، این تابع حداکثر تا چهار آرگومان به شرح زیر می پذیرد:
- array : آرگومان اول این تابع همان آرایه ای است که قصد برش قسمت خاصی از آن را داریم.
- offset : نقطه شروع برش را به صورت عددی مشخص می کند، در صورتی که این مقدار منفی باشد، نقطه برش از انتهای آرایه محاسبه می شود.
- length : طول برش را مشخص می کند، در صورتی که طول برش از عناصر موجود در آرایه بیشتر باشد، تنها عناصر موجود به خروجی ارسال می شوند.
- preserve_keys : اگر با مقادیر TRUE تنظیم شده باشد، شماره کلیدها در آرایه خروجی بدون تغییر و همان شماره کلید آرایه اصلی خواهد بود (در غیر این صورت شمارش از صفر شروع و به انتها ختم می شود).
مثال:
<?php
$array = array('a', 'b', 'c', 'd', 'e');
$array_slice = array_slice($array, 3);
print_r($array_slice);
$array_slice = array_slice($array, 3, 1);
print_r($array_slice);
$array_slice = array_slice($array, -3, 2);
print_r($array_slice);
?>
خروجی مثال بالا به صورت زیر خواهد بود:Array
(
[0] => d
[1] => e
)
Array
(
[0] => d
)
Array
(
[0] => c
[1] => d
)
تابع array_splice
تابع array_splice برای حذف قسمتی خاص از آرایه و جایگزینی آن با مقادیر جدید استفاده می شود، این تابع حداکثر می تواند چهار آرگومان به شرح زیر داشته باشد:
- array : آرگومان اول این تابع همان آرایه ای است که قصد حذف قسمت خاصی از آن را داریم.
- offset : نقطه شروع حذف را به صورت عددی مشخص می کند، در صورتی که این مقدار مثبت باشد، نقطه حذف از offset و ماقبل آن محاسبه و در صورتی که منفی باشد، نقطه حذف از انتهای آرایه و مابعد نقطه offset محاسبه می شود.
- length : این پارامتر در اینجا رفتاری متفاوت دارد، اگر با مقادیر مثبت تنظیم شود، به همان تعداد از عناصر بعد از offset حفظ و مابقی حذف می شوند (در صورتی که مقادیر offset بزرگتر یا مساوی length باشد، در حذف عناصر، الویت با offset است و length نادیده گرفته می شود)، اگر با مقادیر منفی تنظیم شود، رفتار آن به انتهای آرایه معطوف می شود (برای درک بهتر می توانید چند مثال فرضی بنویسید و با print_r از آنها خروجی بگیرید).
- replacement : اگر این پارامتر تنظیم شود، مقادیر حذف شده با مقادیر جدید جایگزین می شوند، در صورتی که تنظیمات قسمت offset و length به گونه ای باشد که مقادیری از آرایه اصلی حذف نشود، در این حالت مقادیر جدید بر اساس offset به آرایه اصلی اضافه می شوند (کلیدها در این حالت preserve یا از پیش تعریف شده نیستند و لذا شمارش از صفر شروع و به انتها ختم می شود).
نکته: به نظر این تابع رفتار خیلی مشخص و یکسانی در تمام نسخه های PHP ندارد، لذا آشنایی در حد اولیه با آن کافی خواهد بود!
مثال:
<?php
$array = array('a', 'b', 'c', 'd', 'e');
$array_splice = array_splice($array, 3);
print_r($array_splice);
$array_splice = array_splice($array, 2, 1);
print_r($array_splice);
?>
خروجی:Array
(
[0] => d
[1] => e
)
Array
(
[0] => c
)
تابع array_sum
تابع array_sum برای محاسبه حاصل جمع مقادیر عددی یک آرایه کاربرد دارد، مثال:
<?php
$array = array(1, 4, 6);
$array_sum = array_sum($array);
echo $array_sum;
?>
که نتیجه برابر 11 خواهد بود.این مبحث را در آموزش های بعدی همچنان ادامه خواهیم داد.
دسته بندی: آموزش مقدماتی » PHP
برچسب ها: PHP
« بعدی

آموزش برنامه نویسی وب با PHP
دستورات شرطی (Conditional Statements) در PHP
توابع کار با آرایه در PHP - بخش دوم
توابع (Functions) در PHP
دستور switch و case در PHP
دیدگاه


ناصری
۱۵:۲۱ ۱۴۰۱/۰۱/۱۲
ببخشید شرمنده استاد
یه سوال دیگه آیا میشه فهمید چه رباتهایی مثلا الان در سایت حضور دارن؟ قبلا یادمه از انجمن ساز مای بی بی استفاده می کردم اون واسه کاربرهای حاضر در سایت ربات هارو هم می نوشت از لطف و راهنمایی شما بسیار سپاسگزارم
خدا بهتون برکت بده
یه سوال دیگه آیا میشه فهمید چه رباتهایی مثلا الان در سایت حضور دارن؟ قبلا یادمه از انجمن ساز مای بی بی استفاده می کردم اون واسه کاربرهای حاضر در سایت ربات هارو هم می نوشت از لطف و راهنمایی شما بسیار سپاسگزارم
خدا بهتون برکت بده
با بررسی و تجزیه اطلاعات User-Agent می توانیم این کار را انجام دهیم اما باید توجه کنید عملکرد ربات ها به این صورت نیست که در سایت حضور داشته باشند، ربات ها معمولا صرفا برای دریافت اطلاعات یک صفحه از سایتتان درخواست URL مورد نظر را به سرور ارسال و در چند ثانیه نتیجه را از سرور دریافت می کنند، به این صورت فقط لحظه ارسال درخواست ربات از سرور قابل ثبت است و بر همین اساس می شود به فرض تا ۱۰ دقیقه بعد را مبنای آنلاین بودن ربات قرار داد، برای کاربران واقعی می شود از Ajax یا WebSocket استفاده و به فرض هر ۳۰ ثانیه وضعیت آنلاین بودن را چک کرد چون امکان اجرای دستورات JavaScript در سمت Client (مرورگر) وجود دارد.
ناصری
۱۵:۱۰ ۱۴۰۱/۰۱/۱۲
خیلی ممنون از شما
دستتون طلا درست شد فقط یه سوال دیگه
slurp هم سرچ کردم نوشته بودن ربات یاهوه آیا اونم میشه به الگو اضافه کرد؟
با تشکر
دستتون طلا درست شد فقط یه سوال دیگه
slurp هم سرچ کردم نوشته بودن ربات یاهوه آیا اونم میشه به الگو اضافه کرد؟
با تشکر
بله، مشابه کلماتی که در الگو می بینید می توانید کلید واژه های بیشتری اضافه یا کم کنید، کاراکتر | به معنی "یا" هست.
ناصری
۱۲:۴۸ ۱۴۰۱/۰۱/۱۲
با سلام و خسته نباشید
ببخشید من وقتی کاربری مطلبی رو بازدید می کنه یه نفر به بازدید کننده ها اضافه میشه بعد دیروز مثلا ۳۰۰ تا بازدید نداشتم ولی بالای ۵۰ هزار تا بازدید توی سایتم ثبت شده که نشون میدن اکثرا ربات های جستجو هستن و این شماره بازدید کننده های واقعی سایتم رو غیرواقعی کرده آیا راهی وجود داره که بازدید کننده های واقعی رو از بازدید کننده های غیرواقعی تشخیص داد؟
یا تابعی که جلوی شمارش بازدید کننده ربات ها رو بگیره؟ حتی من آمار رو بر اساس سشن کردم که در بازه یه ساعته فقط یه شماره برای هر مطلب از هر بازدید کننده ثبت بشه ولی باز آمارها و بازدیدها غیرواقعی هستن
با تشکر
ببخشید من وقتی کاربری مطلبی رو بازدید می کنه یه نفر به بازدید کننده ها اضافه میشه بعد دیروز مثلا ۳۰۰ تا بازدید نداشتم ولی بالای ۵۰ هزار تا بازدید توی سایتم ثبت شده که نشون میدن اکثرا ربات های جستجو هستن و این شماره بازدید کننده های واقعی سایتم رو غیرواقعی کرده آیا راهی وجود داره که بازدید کننده های واقعی رو از بازدید کننده های غیرواقعی تشخیص داد؟
یا تابعی که جلوی شمارش بازدید کننده ربات ها رو بگیره؟ حتی من آمار رو بر اساس سشن کردم که در بازه یه ساعته فقط یه شماره برای هر مطلب از هر بازدید کننده ثبت بشه ولی باز آمارها و بازدیدها غیرواقعی هستن
با تشکر
با بررسی اطلاعات واسط کاربری (User-Agent) می توانیم تا حدود زیادی این مشکل را رفع کنیم، به طور مثال:
<?php
if(preg_match('/spider|find|domain|analytic|spam|mail|validat|crawl|bot|archive|^$/i', $_SERVER['HTTP_USER_AGENT'])) {
echo 'User Is Bot!';
} else {
echo 'User Is Not Bot!';
}
?>
اگر کاربر ربات نبود می توانید کدهای آمارگیر را اجرا کنید.داود زنگنه
۱۲:۱۴ ۱۳۹۷/۱۱/۰۹
سلام برای برش قسمتی از یک ارایه دو بعدی باید چه دستوری بنویسم یعنی از چند ارایه قسمت مشخصی را جدا کنیم
برای این منظور باید از تابع array_slice در حلقه for یا foreach استفاده کنید، مثال:
<?php
$array = array(
array('A', 'B', 'C', 'D', 'E'),
array('F', 'G', 'H'),
array('I', 'J', 'K', 'L')
);
foreach($array as $key => $value){
if($key == 1){
$sub_array = array_slice($value, 1, 1, true);
}
}
print_r($sub_array);
?>
در این مثال از آرایه زیرمجموعه دوم، کلید 1 به میزان 1 مقدار را برش زده ایم.http://php.net/manual/en/function.array-slice.php
حسین
۱۵:۴۳ ۱۳۹۷/۰۸/۱۲
سلام ممنون برای اموزش سوال داشتم من از سیشن برای سبد خرید استفاده میکنم میخوام علاوه بر ایدی اسم محصول و قیمتشم بزارم داخل مثلا وقتی سیشن یک گفتم هم ایدی و هم اسم و قیمت نشون بده
انجام این کار چندان سخت نیست، هم می توانید هنگام مقداردهی به سشن آی دی آیتم های مورد نظر را از دیتابیس استخراج کرده و به صورت رشته مجزا شده مقداردهی کنید، به طور مثال:
$_SESSION["id"] = "1|2|3";
در هنگام استفاده نیز می توانید مقدار سشن آی دی را تجزیه کرده و به آرایه تبدیل و از آرایه در برنامه استفاده کنید.<?php
$_SESSION["id"] = "1|2|3";
$numbers = explode('|', $_SESSION["id"]);
print_r($numbers);
echo $numbers[0];
echo $numbers[1];
echo $numbers[2];
?>
روش ساده تر این است که سشن آی دی مجزا برای هر آیتم ایجاد کنید.سعید
۱۲:۱۱ ۱۳۹۵/۰۴/۱۱
سلام و خسته نباشید من می خواستم یک متن رو از داخل mysql در php نمایش بدم مشکلم اینه که متن داخل sql به صورت چند خطی هست ولی زمان چاپ متن در php همه رو پشت سر هم نشون می ده
مثال :
سلام خط اول هست
و با احترام خط دوم
ولی در php همه پشت سر هم نشون می ده با تابع echo لطفا راهنمایی بفرمایید با تشکر فراوان
مثال :
سلام خط اول هست
و با احترام خط دوم
ولی در php همه پشت سر هم نشون می ده با تابع echo لطفا راهنمایی بفرمایید با تشکر فراوان
کاراکترهای نامرئی
\r\n
برای ایجاد خط جدید کاربرد دارند، منتها این کاراکترها به هنگام چاپ در صفحات وب و نمایش در مرورگر نادیده گرفته می شوند، برای رفع این مشکل از تابع nl2br استفاده کنید:http://php.net/manual/en/function.nl2br.php
نگار
۲۰:۲۷ ۱۳۹۴/۱۰/۲۷
سلام و تشکر از مطالب آموزندتون
بنده میخواستم یک ارایه را داخل آرایه ای دیگه جستجو کنم و اون مقادیری که در ارایه یافت شدن رو نمایش ندم.
به طور واضح تر عرض کنم میخواستم شماره میزهای رزرو نشده رو به کاربرم نمایش بدم. اما متاسفانه نتونستم اگه لطف کنید راهنمایی کنید ممنون میشم که بتونم شماره میزهای رزرو نشده رو توی یه آرایه بریزم.
اینم کدم:
بنده میخواستم یک ارایه را داخل آرایه ای دیگه جستجو کنم و اون مقادیری که در ارایه یافت شدن رو نمایش ندم.
به طور واضح تر عرض کنم میخواستم شماره میزهای رزرو نشده رو به کاربرم نمایش بدم. اما متاسفانه نتونستم اگه لطف کنید راهنمایی کنید ممنون میشم که بتونم شماره میزهای رزرو نشده رو توی یه آرایه بریزم.
اینم کدم:
<?php
function all($time,$gdate)
{
$desk_total =$this->db->select('deskID')->get('desk')->result_array();
$idarr = array();
foreach ($desk_total as $key => $value)
{
$idarr[] = "'{$value['deskID']}'";
}
$ids = implode(',',$idarr);
$sql = " SELECT * FROM atisa_reserve
WHERE atisa_reserve.startTime ='{$time}' AND atisa_reserve.reservedDate='{$gdate}' ";
$r_desk = $this->db->query($sql)->result_array();
$posts = array();
foreach ($r_desk as $key => $value)
{
$r_desks = $value['deskID'];
if (array_key_exists($r_desks, $desk_total))
{
next($r_desk);
}
else
{
$posts[$r_desks]= array(
'name' => $value['deskID'],
);
}
}
print_r($posts);
exit();
}
?>
سلام
آنطور که از توضیحات و کدهای شما برداشت کردیم، راه حل را خودتان پیدا کرده اید و صرفا یک خطای تایپی در کدها وجود دارد (if در خطوط پایانی با حرف بزرگ تایپ شده که اصلاح شد!)، اگر مشکل دیگری وجود دارد، صرفا با امکان تست حقیقی کد (تست کد در حالت متصل به دیتابیس) می توان مشکل را تشخیص داد و رفع کرد.
آنطور که از توضیحات و کدهای شما برداشت کردیم، راه حل را خودتان پیدا کرده اید و صرفا یک خطای تایپی در کدها وجود دارد (if در خطوط پایانی با حرف بزرگ تایپ شده که اصلاح شد!)، اگر مشکل دیگری وجود دارد، صرفا با امکان تست حقیقی کد (تست کد در حالت متصل به دیتابیس) می توان مشکل را تشخیص داد و رفع کرد.
امین
۰۲:۳۴ ۱۳۹۴/۰۶/۱۹
سلام استاد ببخشید شاید جاش اینجا نباشه اما با سرچ اومدم این صفحه ..
استاد من یک جدول دارم میخوام سطرهای این جدول رو نشون بدم که حاوی نمرات دانش آموز است هر سطر مال یه دانش آموز بعد هر سطری فیلد نمره داره - من میخوام در کنار این فیلد نمره یک آپشن باتم بزارم که وقتی نمره رو ثبت کردم اینو خودم دستی تیک بزنم به عنوان تاییده این نمره.
و بعد در آخر کار میخوام یک دکمه باشه وقتی زدم همه ی این اطلاعات در جدول گروهی آپدیت بشه...
هر کار کردم نشد مگه اینکه آپشن رو بیخیال بشم که نمیشه بیخیالش شد باید وجود داشته باشه !!!
استاد من یک جدول دارم میخوام سطرهای این جدول رو نشون بدم که حاوی نمرات دانش آموز است هر سطر مال یه دانش آموز بعد هر سطری فیلد نمره داره - من میخوام در کنار این فیلد نمره یک آپشن باتم بزارم که وقتی نمره رو ثبت کردم اینو خودم دستی تیک بزنم به عنوان تاییده این نمره.
و بعد در آخر کار میخوام یک دکمه باشه وقتی زدم همه ی این اطلاعات در جدول گروهی آپدیت بشه...
هر کار کردم نشد مگه اینکه آپشن رو بیخیال بشم که نمیشه بیخیالش شد باید وجود داشته باشه !!!
سلام
برای این کار باید از فرم multiple استفاده کنید و مقادیر را پس از ارسال، در سرور به صورت آرایه دریافت و در حلقه (for, foreach و...) استفاده کنید، یک مثال ساده (در این حالت تمام فیلدها یک نام دارند + علامت []):
برای این کار باید از فرم multiple استفاده کنید و مقادیر را پس از ارسال، در سرور به صورت آرایه دریافت و در حلقه (for, foreach و...) استفاده کنید، یک مثال ساده (در این حالت تمام فیلدها یک نام دارند + علامت []):
<input type="text" id="user-1" name="user[]" value="1">
<input type="text" id="user-2" name="user[]" value="2">
<input type="text" id="user-3" name="user[]" value="3">
اینها باید در یک form با متد post استفاده شوند و در سمت سرور پارامترها به صورت آرایه از طریق متد POST قابل دریافت و استفاده هستند، به فرض:<?php
$my_array = $_POST['user'];
$loop = 1;
foreach($my_array as $key => $value){
echo 'input-'.$loop.' => '.$value.'<br>';
$loop++;
}
?>
نکته: قاعدتا این پارامترها را می توان در پرس و جوی دیتابیس نیز استفاده کرد، در صورتی که با PHP آشنا باشید، نوشتن پرس و جوی داینامیک با وجود اطلاعات در حلقه خیلی پیچیده نیست!مهدي
۰۲:۱۳ ۱۳۹۳/۱۰/۲۲
سلام. کد زير خروجي دريافت پيام ورودي وب سرويس (sms) است که بعد از ارسال
يعني مثلا داشته باشم
خيلي ممنون
getrecievemessage($params))
به سرور نشون داده ميشهstdClass Object ( [GetReceiveMessagesResult] => stdClass Object ( [Messages] => Array ( [0] => stdClass Object ( [MessageID] => 26830891 [RecipientNumber] => 500012***2165 [SenderNumber] => 09390****58 [Body] => سلام.تست وب سرویس [ReceiveDate] => 1420895802 ) [1] => stdClass Object (...)
من چطور ميتونم از داخل اين ، مثلا متن پيام که [body] هست رو بگيرم؟يعني مثلا داشته باشم
$body=[body]
اون object که بالا نوشته به ارايه ها مربوطه يا مبحث جدايي از php هست؟خيلي ممنون
سلام
خیر این صرفا به آرایه ها مربوط نیست، به بحث شی گرائی در PHP و کلاس stdClass نیز مربوط است، متاسفانه صرف درج خروجی بدون دیدن سورس کدهای اصلی و تست برای ارائه پاسخ کافی نیست.
خیر این صرفا به آرایه ها مربوط نیست، به بحث شی گرائی در PHP و کلاس stdClass نیز مربوط است، متاسفانه صرف درج خروجی بدون دیدن سورس کدهای اصلی و تست برای ارائه پاسخ کافی نیست.
علی
۲۳:۴۹ ۱۳۹۳/۱۰/۰۵
سلام خسته نباشی
من میخواستم قبل اینکه پیام به دیتابیس ارسال بشه اون پیام رو فیلتر کنم
منظورم فیلتر کردن کلمات بد هستش
این کد رو نگاه کنید
خداییش خیلی باهاش سر و کله زدم اخرش به جایی نرسیدم فک کنم 2 ساعت بیشتر بود داشتم باهاش سر و کله میزنم
من میخواستم قبل اینکه پیام به دیتابیس ارسال بشه اون پیام رو فیلتر کنم
منظورم فیلتر کردن کلمات بد هستش
این کد رو نگاه کنید
// Prepare the insertion
$stmt = $this->db->prepare(sprintf("INSERT INTO `chat` (`from`, `to`, `message`, `read`, `time`) VALUES ('%s', '%s', '%s', '%s', CURRENT_TIMESTAMP)", $this->db->real_escape_string($this->id), $this->db->real_escape_string($uid), $this->db->real_escape_string(htmlspecialchars($message)), 0));
موندم چطوری این کد رو با کد بالا مخلوط کنم که جواب بده$originals = array("Bad1", "Bad2", "Bad3");
$replacements = array("****" ,"****" ,"****");
$message = str_ireplace($originals, $replacements, $message);
یعنی قبل اینکه متن کاربر ارسال بشه به دیتابیس اون کلمه بد فیلتر بشه و فیلتر اون کلمه وارد دیتابیس بشه.خداییش خیلی باهاش سر و کله زدم اخرش به جایی نرسیدم فک کنم 2 ساعت بیشتر بود داشتم باهاش سر و کله میزنم
سلام
طبق تکه کد درج شده، کافی است قسمت دوم کدها را قبل از متغیر stmt قرار دهید! با توجه به استفاده مستقیم از متغیر message در کدها، می توان قبل از درج در دیتابیس مقدار آن را به راحتی تغییر داد و این کار با روش بالا باید امکانپذیر باشد، در غیر این صورت ممکن است اشکال از مورد دیگری باشد که نیاز به تست و خطایابی است.
طبق تکه کد درج شده، کافی است قسمت دوم کدها را قبل از متغیر stmt قرار دهید! با توجه به استفاده مستقیم از متغیر message در کدها، می توان قبل از درج در دیتابیس مقدار آن را به راحتی تغییر داد و این کار با روش بالا باید امکانپذیر باشد، در غیر این صورت ممکن است اشکال از مورد دیگری باشد که نیاز به تست و خطایابی است.
فاطمه
۱۵:۵۷ ۱۳۹۳/۰۹/۳۰
سلام
ببخشید این قسمت دقیقا چیکار میکنه؟
ببخشید این قسمت دقیقا چیکار میکنه؟
while($info=$agentCon->fetch_assoc()):
سلام
برای درک این تکه کد باید با شی گرائی آشنا باشید، متد fetch_assoc در اینجا به صورت خودنوشت (توسط برنامه نویس) تعریف شده و احتمالا مشابه تابع اصلی نتایج پرس و جوی پایگاه داده را در قالب آرایه برمی گرداند که در حلقه while پردازش می شود.
برای درک این تکه کد باید با شی گرائی آشنا باشید، متد fetch_assoc در اینجا به صورت خودنوشت (توسط برنامه نویس) تعریف شده و احتمالا مشابه تابع اصلی نتایج پرس و جوی پایگاه داده را در قالب آرایه برمی گرداند که در حلقه while پردازش می شود.
۱۲:۰۲ ۱۳۹۳/۰۸/۲۲
خیلی خوب بود ممنون
مسعود
۰۰:۰۲ ۱۳۹۳/۰۶/۱۴
با سلام
یه سوال داشتم . میخواستم ببینم منظور از &= در کد زیر چیست ؟
یه سوال داشتم . میخواستم ببینم منظور از &= در کد زیر چیست ؟
$this->registry =& $registry;
سلام
علامت &= برای برقراری اتصال بین دو متغیر استفاده می شود، یعنی با تغییر متغیر اول، متغیر دوم نیز به صورت خودکار تغییر می کند، مثال:
علامت &= برای برقراری اتصال بین دو متغیر استفاده می شود، یعنی با تغییر متغیر اول، متغیر دوم نیز به صورت خودکار تغییر می کند، مثال:
<?php
$a =& $b;
$a = 55;
echo $b.'<br>';
$a = 66;
echo $b.'<br>';
?>
علی
۰۸:۵۵ ۱۳۹۳/۰۴/۲۶
حذف شد
در قالب پلاگین کد رو قرار و صدا زد ولی اینم تست کردم کار میکنه ولی بازم عکس طرف نشون داده نمیشهمال شما رو امتحان کردم بازم نتیجه ای نگرفتم
من موندم چرا تو سایت های فارسی هیچکی حرفی در مورد اسمارتی نمیزنه باز خوب خودش انجمن داره
- متاسفانه برنامه ای نداریم که از این موتور قالب استفاده کند، لذا امکان تست کدها میسر نیست، اگر مایل بودید اطلاعات هاستتان را از طریق ایمیل به همراه توضیح مشکل ارسال کنید تا بررسی شود.
- راجب اسمارتی مطالبی در وب فارسی وجود دارد!
- راجب اسمارتی مطالبی در وب فارسی وجود دارد!
علی
۱۲:۴۳ ۱۳۹۳/۰۴/۲۵
میدونم اینجا جاش نیست
ولی به خدا با هزار بدبختی با ایرانسل انلاین شدم تا اومدم نظر بدم
تو موتور اسمارتی واسه اینکه یه دستور تو php لود بشه باید چیکار کرد
الان مثلا اگه جاوا بود با این دو تا مشکل حل میشد
ولی به خدا با هزار بدبختی با ایرانسل انلاین شدم تا اومدم نظر بدم
تو موتور اسمارتی واسه اینکه یه دستور تو php لود بشه باید چیکار کرد
{php}
/// Include the Services_Gravatar class.
require_once 'Services/Gravatar.php';
/// این خط زیر منظورم هست
$gravatar = new Services_Gravatar('{$comments[comment].email}', array(
'size' => 180,
'rating' => Services_Gravatar::RATING_G,
));
{/php}
{php} echo $gravatar->getHtml(array('title' => 'John Doe', 'alt' => 'John Doe avatar')) {/php}
{$comments[comment].email}
رو چون تو php گذاشتم اجرا نمیشهالان مثلا اگه جاوا بود با این دو تا مشکل حل میشد
{/literal} جای کد {literal}
حالا تو php چطوریه؟ تو انجمن اسمارتی پیام گذاشتم ولی کسی جواب نمیدهسوالتان مبهم است!
به نظر مشکل syntax در کدهای شما وجود دارد، این قسمت شاید به صورت زیر صحیح باشد (نیاز به تست دارد):
به جای
به نظر مشکل syntax در کدهای شما وجود دارد، این قسمت شاید به صورت زیر صحیح باشد (نیاز به تست دارد):
به جای
'{$comments[comment].email}'
از حالت$comments[comment].email
یا"$comments[comment].email"
استفاده کنید، البته مشخص نیست چرا email با یک نقطه به آرایه قبل خود متصل شده (مگر اینکه email یک مقدار constant تعریف شده با define باشد)، در هر صورت استفاده از کدهای PHP در قالب Smarty به همین صورتی است که در نمونه کد درج کرده اید، منتها به نظر در قسمتی یک خطای syntax وجود دارد که حل آن نیاز به آزمایش و خطا است (متاسفانه ما سیستم Smarty در اختیار نداریم).
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.