parsgreen.com
article

توابع کار با آرایه در php - بخش اول

php-array-functions

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

تابع is_array


نخستین تابعی که به آن می پردازیم، is_array نام دارد، is_array یک متغیر را به عنوان آرگومان دریافت کرده و بررسی می کند تا ببیند که آیا متغیر مورد نظر یک آرایه است (مقدار true یا 1 برگردانده می شود) یا خیر (مقدار false یا صفر برگردانده می شود)؛ به مثال زیر توجه کنید.
<?php
$array = array('welcome', 'to', 'php', 'array', 'learning');
$check = is_array($array);
if($check == true){
    echo 'true';
}
else{
    echo 'false';
}
?>
خروجی مثال بالا برابر خواهد بود با true، چرا که متغیر فرضی array یک آرایه است و نتیجه بررسی تابع is_array برابر عدد 1 که معادل true در php است خواهد بود.
نکته: با استفاده از دستور print_r می توانید محتویات درون یک آرایه را به صورت قابل خواندن مشاهده کنید، به طور مثال برای آرایه بالا، به صورت زیر می توانیم این کار را انجام دهیم.
<?php
$array = array('welcome', 'to', 'php', 'array', 'learning');
print_r($array);
?>
که خروجی برابر خواهد بود با مقادیر زیر.
Array
(
    [0] => welcome
    [1] => to
    [2] => php
    [3] => array
    [4] => learning
)

تابع explode


اگر بخواهیم یک رشته متنی را تبدیل به آرایه کنیم، تابع explode در php این کار را انجام می دهد، نحوه کار این تابع بسیار ساده است، یک مقدار به عنوان جدا ساز (کلید تجزیه) و یک متغیر (رشته متنی) به عنوان آرگومان دریافت کرده و در نهایت یک آرایه به ما تحویل می دهد، به طور مثال اگر متنی که می خواهیم آن را تجزیه و تبدیل به آرایه کنیم، به صورت زیر باشد:
welcome to php array learning
کلید تجزیه در اینجا فواصل خالی بین کلمات است، لذا خواهیم نوشت:
<?php
$string = 'welcome to php array learning';
$convert = explode(' ', $string);
print_r($convert);
?>
اگر اکنون از متغیر convert با استفاده از print_r خروجی بگیریم، خواهیم دید که این متغیر تبدیل به یک آرایه شده است.
Array
(
    [0] => welcome
    [1] => to
    [2] => php
    [3] => array
    [4] => learning
)
نکته: تابع explode یک عدد نیز به عنوان آرگومان سوم می پذیرد، این عدد تعداد کلیدهای تجزیه ای که در تبدیل به آرایه استفاده می شوند را مشخص می کند، به طور مثال اگر بخواهیم رشته ما در 3 آرایه تجزیه شود، دستور را به شکل زیر تغییر می دهیم:
<?php
$string = 'welcome to php array learning';
$convert = explode(' ', $string, 3);
print_r($convert);
?>
و خروجی برابر خواهد بود با مقادیر زیر.
Array
(
    [0] => welcome
    [1] => to
    [2] => php array learning
)
نکته: دستور print_r تنها در مورد آرایه ها کاربرد دارد.

تابع implode


در کنار تابع explode تابع دیگری به نام implode وجود دارد که دقیقا کار آن برعکس explode است، implode مقادیر موجود در کلیدهای آرایه را به وسیله یک کلید ترکیب، تبدیل به یک رشته می کند، به مثال زیر توجه کنید.
<?php
$array = array('welcome', 'to', 'php', 'array', 'learning');
$convert = implode(' ', $array);
echo $convert;
?>
ملاحظه می کنید که در اینجا ما از یک فضای خالی به عنوان کلید ترکیب استفاده کرده ایم، نتیجه مثال بالا به صورت زیر خواهد بود.
welcome to php array learning
که در واقع آرایه ما تبدیل به یک رشته متنی شده است.

تابع  array_change_key_case


اگر آرایه ما به جای اعداد دارای کلیدهای متنی باشد و بخواهیم حروف کوچک کلیدها را تبدیل به حروف بزرگ یا برعکس حروف بزرگ کلیدها را به حروف کوچک تبدیل کنیم، از تابع  array_change_key_case استفاده می کنیم، البته این تابع بیشتر برای مقادیر به زبان انگلیسی کاربرد دارد.
تابع array_change_key_case دو آرگومان می پذیرد، آرگومان اول همان آرایه ای  است که قصد بررسی آن را داریم (input)، آرگومان دوم می تواند دو مقدار CASE_UPPER (تبدیل به حروف بزرگ) یا  CASE_LOWER (تبدیل به حروف کوچک، حالت پیش فرض) باشد (case)، به عنوان مثال آرایه زیر را در نظر بگیرید.
<?php
$array = array('ali' => 3, 'pedram' => 6, 'maryam' => 5);
$change = array_change_key_case($array, CASE_UPPER);
print_r($change);
?>
خروجی مثال بالا به شکل زیر خواهد بود.
Array
(
    [ALI] => 3
    [PEDRAM] => 6
    [MARYAM] => 5
)

تابع array_chunk


اگر بخواهیم یک آرایه را به چند آرایه تجزیه کنیم، تابع array_chunk می تواند به کار گرفته شود، این تابع سه آرگومان می پذیرد، آرگومان اول همان آرایه ای است که روی آن کار می کنیم (input)، آرگومان دوم تعداد کلید و مقدار برای آرایه های زیر مجموعه است (size) و آرگومان سوم نحوه افزایش شماره کلیدها را (به صورت true یا false) در آرایه های زیر مجموعه نشان می دهد (حالت پیش فرض false است)که به آن preserve_keys گفته می شود، به مثال زیر توجه کنید.
<?php
$array = array('a', 'b', 'c', 'd' , 'e');
$chunk = array_chunk($array, 2, false);
print_r($chunk);
?>
خروجی مثال بالا به صورت زیر خواهد بود.
Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => c
            [1] => d
        )

    [2] => Array
        (
            [0] => e
        )

)
ملاحظه می کنید که آرایه های زیرمجموعه با دو کلید و مقدار تفکیک شده اند، البته چون تعداد کلید های ما پنج عدد بود، آرایه زیرمجموعه سوم تنها یک کلید و مقدار دارد.
اگر مقادیر preserve_keys برابر true باشد، خروجی مثال ما به صورت زیر خواهد بود.
Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [2] => c
            [3] => d
        )

    [2] => Array
        (
            [4] => e
        )

)

تابع array_combine


تابع array_combine برای ترکیب دو آرایه و ایجاد یک آرایه جدید کاربرد دارد، عملکرد این تابع به این شکل است که مقادیر آرایه اول را (آرگومان اول) به عنوان کلید و مقادیر آرایه دوم (آرگومان دوم) را به عنوان مقدار آرایه نهایی در نظر می گیرد، یعنی تنها با استفاده از مقادیر (value) دو آرایه را به یک آرایه تبدیل می کند، به مثال زیر توجه کنید.
<?php
$array1 = array('a', 'b', 'c', 'd' , 'e');
$array2 = array('55', '23', '43', '12' , '98');
$combine = array_combine($array1, $array2);
print_r($combine);
?>
خروجی مثال بالا به شکل زیر خواهد بود.
Array
(
    [a] => 55
    [b] => 23
    [c] => 43
    [d] => 12
    [e] => 98
)
یادآوری: دقت کنید که کلید ها در آرایه های بالا در واقع به صورت عددی و پنهان هستند، یعنی به فرض آرایه اول در واقع به شکل زیر است.
$array1 = array(0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd' , 4 => 'e');

تابع array_count_values


تابع array_count_values تعداد فراوانی تکرار هر مقدار (value) از یک آرایه را محاسبه کرده و با استفاده از آن مقدار، یک آرایه جدید می سازد، ساختار آرایه جدید به این صورت است که مقادیر به عنوان کلید های آرایه جدید و تعداد دفعات تکرار آنها به عنوان مقادیر آرایه جدید به کار می روند، به مثال زیر توجه کنید.
<?php
$array = array('a', 'b', 'a', 'd' , 'b');
$count_value = array_count_values($array);
print_r($count_value);
?>
خروجی مثال بالا به شکل زیر خواهد بود.
Array
(
    [a] => 2
    [b] => 2
    [d] => 1
)

تابع array_diff_assoc


تابع array_diff_assoc برای مقایسه یک آرایه با یک یا چند آرایه دیگر کاربرد دارد، نتیجه و خروجی این تابع، یک آرایه جدید با مقادیری است که در آرایه اصلی وجود داشته، ولی در آرایه یا آرایه های مقایسه شده وجود نداشته است، به مثال زیر توجه کنید.
<?php
$array1 = array('Tehran', 'Fars', 'Markazi', 'Gilan' , 'Esfahan');
$array2 = array('Tehran', 'Qazvin', 'Markazi', 'Gilan' , 'Khouzestan');
$array_diff = array_diff_assoc($array1, $array2);
print_r($array_diff);
?>
خروجی مثال بالا به صورت زیر خواهد بود.
Array
(
    [1] => Fars
    [4] => Esfahan
)
نکته: ترتیب کلیدها و مقادیر بین آرایه هایی که مقایسه می شوند در این تابع اهمیت دارد، یعنی به فرض اگر مقدار Tehran در آرایه اول با کلید صفر مشخص شود، در آرایه دوم هم باید در کلید صفر وجود داشته باشد، در غیر این صورت تابع array_diff_assoc آن را نیز به عنوان یک تفاوت بین آرایه ها به خروجی ارسال می کند.

تابع array_diff_key


تابع array_diff_key مشابه تابع array_diff_assoc عمل می کند، با این تفاوت که در اینجا به جای مقادیر، اگر کلید ها بین دو یا چند آرایه مقایسه شده متفاوت باشند، مقادیر متفاوت آرایه اول به خروجی ارسال می شوند، به مثال زیر توجه کنید.
<?php
$array1 = array('Tehran' => 12, 'Fars' => 45, 'Markazi' => 33, 'Gilan' => 47 , 'Esfahan' => 51);
$array2 = array('Tehran' => 16, 'Qazvin' => 32, 'Markazi' => 39, 'Gilan' => 48, 'Khouzestan' => 51);
$array_diff = array_diff_key($array1, $array2);
print_r($array_diff);
?>
خروجی مثال بالا به صورت زیر خواهد بود.
Array
(
    [Fars] => 45
    [Esfahan] => 51
)
ملاحظه می کنید با اینکه مقادیر در آرایه ها با هم متفاوت هستند، اما تنها مواردی به خروجی ارسال شده اند که کلیدهایشان متفاوت بوده.

تابع array_diff_uassoc


تابع array_diff_uassoc نیز با هدف مقایسه دو یا چند آرایه و به دست آوردن خروجی از مقادیر متفاوت آنها به صورت یک آرایه جدید مورد استفاده قرار می گیرد، تنها تفاوت در اینجا این است که خود تابع از یک تابع دیگر که توسط کاربر تعریف می شود، به عنوان آرگومان سوم استفاده می کند، این تابع (تابع کاربر) باید طوری نوشته شود که یکی از اعداد 1-، صفر یا 1 را برگرداند، به مثال زیر توجه کنید.
<?php
function value_compare($a, $b){
    if ($a === $b){
        return 0;
    }
    return ($a > $b)? 1:-1;
}
$array1 = array("lang" => "fa", "page" => "index", "date" => "2012", "10", "03", "10:40");
$array2 = array("lang" => "fa", "page" => "index", "date" => "2013", "16", "03");
$result = array_diff_uassoc($array1, $array2, "value_compare");
print_r($result);
?>
خروجی مثال بالا به شکل زیر خواهد بود.
Array
(
    [date] => 2012
    [0] => 10
    [2] => 10:40
)
ملاحظه می کنید که آرایه خروجی ما، از عناصری که در آرایه اول وجود دارد ولی در آرایه دوم وجود ندارد تشکیل شده است، کلید ها نیز از آرایه اول استخراج شده اند.
نکته 1: در تابعی که توسط کاربر تعریف می شود (در اینجا تابع value_compare، برای هر کلید و مقدار آرایه ها مقایسه ای صورت می گیرد، اگر دو مقدار مساوی باشند، عدد صفر برگردانده می شود و این یعنی آن مورد نباید در خروجی باشد، در غیر این صورت عدد 1 یا 1- برگردانده می شود و مقادیر مربوطه به خروجی ارسال می شود.
نکته 2: در قسمت دوم تابع value_compare از شیوه مختصر نویسی دستورات شرطی (if و else) در php استفاده شده است، در اینجا علامت ? بعد از پرانتز مقایسه، نقش if و علامت : نقش else را دارد.

تابع array_diff_ukey


تابع array_diff_ukey نیز کارکردی مشابه array_diff_uassoc دارد، با این تفاوت که در اینجا به جای مقادیر، از کلیدها برای بررسی دو یا چند آرایه استفاده می شود، در اینجا نیز از یک تابع جانبی که توسط کاربر تعریف می شود استفاده شده و خروجی آن بر مبنای اعداد صفر، 1- یا 1 برگردانده می شود، به مثال زیر توجه کنید.
<?php
function key_compare($a, $b){
    if ($a === $b){
        return 0;
    }
    return ($a > $b)? 1:-1;
}
$array1 = array("lang" => "fa", "page" => "index", "date" => "2012", "10", "03", "10:40");
$array2 = array("lang" => "fa", "page" => "index", "date" => "2013", "16", "03");
$result = array_diff_ukey($array1, $array2, "key_compare");
print_r($result);
?>
خروجی مثال بالا به شکل زیر خواهد بود.
Array
(
    [2] => 10:40
)
اتفاقی که در کد بالا می افتد این است که چون مقدار فرضی 10:40 دارای کلید 2 است و چنین کلیدی در آرایه دوم وجود ندارد، به عنوان خروجی برگردانده می شود، در واقع اگر از آرایه ها به صورت مستقل با دستور print_r خروجی بگیرید، به طور ملموس تری با نحوه کارکرد این تابع آشنا خواهید شد.

تابع array_diff


تابع array_diff نیز از خانواده توابع مقایسه ای در مورد آرایه ها است، این تابع مواردی را به عنوان خروجی انتخاب می کند که مقادیر دو کلید همسان، متفاوت باشند، یا مقادیر همسان و کلیدها متفاوت باشند و اگر یک کلید در آرایه اول وجود داشته باشد ولی آن کلید در آرایه دوم وجود نداشته باشد نیز به عنوان خروجی برگردانده می شود، به مثال زیر توجه کنید.
<?php
$array1 = array(0 => "a", 1 => "b", 2 => "c", 3 => "b");
$array2 = array(0 => "a", 1 => "b", 2 => "f");
$result = array_diff($array1, $array2);
print_r($result);
?>
خروجی مثال بالا به صورت زیر خواهد بود.
Array
(
    [2] => c
)
نکته: همان طور که ملاحظه می کنید، این تابع مقادیر تکراری را مجددا بررسی نمی کند، لذا چون مقدار b در کلید 1 بررسی شده و تفاوتی وجود نداشته است، در کلید 3 از آرایه اول مجددا بررسی نمی شود، اما اگر مقادیر b در کلید 1 از آرایه اول با مقادیر کلید 1 از آرایه دوم متفاوت بود، هم کلید 1 و هم کلید 3 آرایه اول به خروجی ارسال می شد.
بحث توابع مربوط به آرایه ها را در آموزش های بعدی ادامه خواهیم داد.
sectionدسته بندی: آموزش مقدماتی » PHP
related مطالب بیشتر:
» کار با switch و case در php
» آرایه (Array) در برنامه نویسی php
» دستورات شرطی if و else در php
» توابع (Functions) در php
» آشنایی و کار با متغیر ها (Variables) در php
commentنظرات (۱۸ یادداشت برای این مطلب ارسال شده است)
نویسنده: احسان یزدی
زمان: ۱۱:۲۹:۲۸ - تاریخ: ۱۳۹۱/۰۹/۲۹
سلام ممنون از مطالب مفیدتون من تازه وارد این کار یعنی طراحی وب شدم مطالب شما خیلی در امر آموزش کمکم می کنه مخصوصا آموزش های php واقعا ممنون.
پاسخ: 
سلام
خوشحالیم که آموزش ها مفید بوده، آرزوی موفقیت.
نویسنده: SHAHIN
زمان: ۲۲:۳۲:۲۶ - تاریخ: ۱۳۹۲/۰۶/۰۲
به عنوان مثال ارایه ها چه کاربردی دارند؟
پاسخ: 
لطفا به آموزش قبلی مراجعه کنید (از دکمه های قبل و بعد استفاده نمائید).
نویسنده: خلیل
زمان: ۱۸:۲۲:۱۵ - تاریخ: ۱۳۹۲/۰۷/۲۸
اول از همه ممنون بابت اموزش های خوبتون و بعد این که شاهین هم بی تقصیر نیست . استاد یک راهنمایی بکنین درست توضیح دادین ولی برای شما که استاد کد نویسی هستین راحته درکش ولی برای ما درکش یه کم زمان میبره و این که استاد وقتی شما مثال میزنین مثلا در مباحث قبل میگین که اگر حسین 20 کتاب و علی 10 کتاب داره با کدی میشه انها را جمع بست درست از این راحتر نمیشه بیان کرد ولی خواهش من اینه اگه میشه در مثل هایتان در خود وب سایت ها ذکر شود مثلا بگین این تابع که معرفی میشه در سایت در امار گیر سایت استفاده میشه یا بهتره در امارگیر استفاده بشه که کارش در امار گیر تعداد افزایشی عضویت ها رو نشون میده . منظورم این نیست که کلی بگین ولی اگه چند نمونه اشاره کنین خیلی خوب میشه اینجوری هم بهتر درک می کنیم که کجا ها کارایی داره .
درست شما خودتون خیلی خوب مطالب را توضیح دادین ولی خوب چون ما مبتدی هستیم درکشون یه کم سخته
بازم ممنون استاد از زحماتی که برای ما مبتدی ها کردین .
پاسخ: 
مباحث مقدماتی ارتباط خاصی با کاربرد در اسکریپت یا بخش خاصی ندارند، یعنی به فرض بحث آرایه یک مبحث فراگیر است و نمی توان گفت در فلان قسمت بیشتر کاربرد دارد و در جایی دیگر کمتر! این به خود برنامه نویس، نیاز و تفکرات او بستگی دارد، متاسفانه اکثر کاربران توقع دارند بدون تمرین، صرف زمان و گذراندن مباحث مقدماتی به سرعت به بخش کاربردی برسند یا اینکه بدون جستجو و تلاش برای حل مشکلات، به دنبال لقمه آماده هستند که این هم کار خودشان و هم کار ما را سنگین تر می کند! سوالی که این کاربر پرسیده در مطلب پیشین و به راحت ترین فرم ممکن توضیح داده شده، لذا طرح مجدد آن خیلی بجا به نظر نمی رسد، برای پاسخگویی به حجم بالای سوالات کاربران، هیچ چاره ای جزء نادیده گرفتن سوالات غیر ضروری نیست.
نویسنده: خلیل
زمان: ۲۰:۴۴:۰۰ - تاریخ: ۱۳۹۲/۰۷/۲۸
دوباره سلام .
استاد شرمنده اگه پیشنهاد بی جا و باعث ناراحتی شما شد من قصد این کار رو نداشتم . من فقط پیشنهاد دادم و این که شما همان طور که گفتم برای ما تا همین جاشم خیلی زحمت کشیدین که این همه مطالب رو تایپ و برای ما گذاشتین و این که به همه سوالات جواب میدین .
استاد یه سوال کوچک من تا الان که بخش مقدماتی رو تموم کردم همه مطالب رو تا جایی که تونستم و کد هایی که میشد نوشت تمرین کردم . بعد از مقدماتی میخوام شروع به طراحی کنم در حد ازمایش و بین این کدام مطالب رو بخونم اول مطالب بخش کاربردی یا مهارت های وب ؟
پاسخ: 
سلام
به مطالب سایت اکتفا نکنید، چون هنوز خیلی از بخش ها تکمیل نشده اند، بخش آموزش های کاربردی به نیاز شما بستگی دارد، چون مباحث این بخش پراکنده هستند و وابستگی خاصی به هم ندارند، مطالب قسمت مهارتهای وب سبک تر و از نظر دشواری در حد متوسط هستند، پس بهتر است ابتدا نگاهی به آنها بیندازید.
نویسنده: خلیل
زمان: ۰۰:۴۸:۵۶ - تاریخ: ۱۳۹۲/۰۷/۳۰
ممنون استاد از راهنمایتون
نویسنده: شاهین
زمان: ۲۲:۴۸:۲۹ - تاریخ: ۱۳۹۳/۰۷/۲۱
ابتدا سپاس گذارم از شما بابت این سایت عالی
سوالی داشتم
من نمیفهمم در مورد توابع، آرایه ها و متغییر ها ما میتونیم مثل css ها کد های جدید اختراع کنیم یا نه؟
از نظر سینتکس های php اوکی شدم ولی کاربردی همچنان عاجزم ضمناً اگر توابع - متغییر - آرایه علاوه بر اختراع کد جدید خودمان کدهای ثابتی هم دارند لطفاً این استانداردها رو هم در اختیارمون بذارید ممنون میشم
تشکر فراوان
پاسخ: 
نکته ای که باید به آن توجه کنید این است که هر زبان در برنامه نویسی با هدف خاصی ایجاد شده اند و انتظارات خاصی را پوشش می دهند، به طور مثال از CSS این انتظار است که بتوان با آن استایل صفحات HTML را ایجاد کرد، لذا قدرت مانور این زبان در همین اندازه است و قواعد تعریف شده برای آن در همین حد می باشد، اما در مورد PHP گستره بحث بسیار فراتر می رود، در اینجا ابزارهای بیشتری مورد نیاز است (مانند توابع، آرایه، حلقه ها و...) تا نیت برنامه نویس برای سیستم (مفسر) قابل درک شده و به واقعیت مجازی تبدیل گردد، لذا قوانین خاصتری برای آن وجود دارد، به طور مثال اگر تعریف یک کلاس در CSS با یک نقطه و عبارت ممکن است، در اینجا هم می توانید یک تابع را با پیش عبارت function و کلمه ای دلخواه ایجاد کنید، در عین حال برخی از توابع به دلیل کاربرد زیاد به طور پیش فرض درون مفسر PHP وجود دارد و نیازی به نوشتن مجدد آنها نیست، به طور مثال نیازی نیست برای بررسی آرایه بودن یک مقدار تابع بنویسید، is_array از قبل در مفسر PHP وجود دارد، لذا در برخی موارد باید خودتان تابع بنویسید و گاهی نیز از توابع آماده استفاده کنید، در مورد متغیرها عموما مربوط به خودتان است و باید آنها را تعریف کنید، آرایه نیز به همین شکل.
نکته: بدون داشتن تمرین و نوشتن برنامه های کوچک نباید انتظار درک روشنی از برنامه نویسی PHP داشته باشید، بیشترین درک با کدنویسی و آموزش گام به گام، تدریجی حاصل می شود.
نویسنده: رضا
زمان: ۱۸:۱۶:۲۳ - تاریخ: ۱۳۹۳/۰۹/۰۷
در رابطه با مطالب درون سایت خیلی خیلی عالی بود اجرکم عندا... ممنونم.
.
.
.
مررررررررررررررررررررررررررررررررسیییییییییییییی
نویسنده: علی
زمان: ۱۱:۴۷:۴۷ - تاریخ: ۱۳۹۴/۰۲/۲۴
با سلام و تشکر. خیلی آموزنده.
چند مورد اشکال تایپی در قسمت تعریف
array_diff_assoc
وجود دارد که به جای کلمه ی آرایه از کلمه ی تابع استفاده شده است که لطفا اصلاح کنید.
یک سوال هم داشتم. تعریف یک متغیر با پیشوند استاتیک
به چه منطور می باشد. در برنامه نویسی تحت سیستم عامل یک گزینه باعث می شود متغیر در طول حیات برنامه مقدارش را حفظ کند ولی در وب نمی دونم چه حالتی پیدا می کند ! آیا با اتمام کار یک اسکریپت پی اچ پی یا همان صفحه باعث می شود مقدار آن برای فراخوانی بعدی پایدار باشد یا منظور دیگری مد نظر است
با تشکر
پاسخ: 
سلام
- ضمن تشکر، اشتباه تایپی اصلاح شد.
- در PHP نیز هدف از تعریف متغیر با scope یا حوزه static بی شباهت به زبان های سیستم عامل نیست، منتها طول حیات یک اسکریپت PHP مادامی است که کدها توسط مفسر پردازش می شوند و هنوز نتیجه به مرورگر ارسال نشده است، با پایان پردازش کدها و ارسال خروجی به مرورگر، همه چیز به حالت پیش فرض بر می گردد (در وب دو فاکتور کلاینت و سرور دخیل هستند که با دستکتاپ متفاوت است)، ضمن اینکه کدهای PHP بین کاربران مختلف به صورت مستقل پردازش می شوند و فراخوانی یک کد توسط یک کاربر تاثیری بر سایر کاربران ندارد!
نویسنده: بهنام
زمان: ۲۰:۱۷:۲۳ - تاریخ: ۱۳۹۴/۰۸/۰۲
سلام استاد
ایام عاشورا رو تسلیت میگویم
سوالی داشتم
چطوری میشه مقادیر منحصر به فرد داخل ارایه ها رو در صفحه خروجی بگیرم؟ مثلا در ارایه دو تا عکس شبیه به هم هست (نام هایشان) میخوام مقدارایی که شبیه همه رو فقط یک بار چاپ کنه ایا تابع اماده ای برای اینکار وجود داره؟
اگر بدون تابع اماده بخوام استفاده کنم و خودم بدون استفاده از تابع اماده استفاده کنم چگونه میشه؟
<?php
$m = "";
$ar = array('amir',
'1.jpg',
'2.jpg',
'3.jpg',
'3.jpg',
'5.jpg',
'1.jpg',
'5.jpg'
);
$ar = array_values(array_unique($ar));
//print_r($ar);
for($i = 0; $i < count($ar); $i++){
echo $ar[$i].'<br>';
}
?>
پاسخ: 
سلام
- برای این کار دو تابع زیر قابل استفاده هستند (کد بالا اصلاح شد):
$ar = array_values(array_unique($ar));
تابع array_unique موارد مشابه را حذف می کند، اما کلیدها بدون تغییر باقی می مانند، به همین جهت با تابع array_values کلیدها از مقدار 0 مجددا مرتب سازی می شوند.
- برای کار با آرایه توابع آماده و استاندارد کار را راحتر انجام می دهند و استفاده از آنها اغلب بهترین راه است، با این حال روشی مشابه کد زیر هم می تواند کاربرد داشته باشد:
<?php
$m = "";
$ar = array('amir',
'1.jpg',
'2.jpg',
'3.jpg',
'3.jpg',
'5.jpg',
'1.jpg',
'5.jpg'
);
$count = count($ar);
@$result = array();
for($i = 0; $i < $count; $i++){
if(!in_array($ar[$i], $result)){
$result[] = $ar[$i];
}
}
print_r($result);
?>
نویسنده: میثم
زمان: ۱۶:۳۴:۵۴ - تاریخ: ۱۳۹۴/۰۹/۱۲
با سلام و ممنون به خاطر سایت مفیدتون.
یه سوال داشتم. فرض کنیم که جدول ما دارای 3 ستون به نام های دسته و زیردسته و متن هست.
حالا اطلاعات سطر اول به شکل:
دسته = 1
زیر دسته = 10
متن = دلخواه
و سطر دوم به شکل
دسته = 1
زیر دسته = 10-11 (مثلا مطلب مشترک بین دو زیر دسته هست)
متن = دلخواه
و ....
هست.
حالا میخوام اطلاعاتی رو نمایش بدم که مربوط به دسته 1 و زیر دسته 10 هستن و این کد رو نوشتم:
$res=mysql_query("Select * From * Where `cat` = '1' and `explode("-",sub)` = '10' Order By `id` DESC ");
while($row = mysql_fetch_array($res)){
....
}
اما کد کار نمی کنه؟ مشکل کجاست؟
پاسخ: 
سلام
دو مشکل در پرس و جو وجود دارد:
- بعد از FROM باید نام جدول را وارد کنید!
- تابع explode را نمی توانید به این شکل استفاده کنید!
پرس و جوی تصحیح شده:
$res=mysql_query("SELECT * FROM tbl_name WHERE `cat` = '1' AND find_in_set('10', REPLACE(sub, '-', ',')) ORDER BY `id` DESC ");
نویسنده: میثم
زمان: ۲۰:۴۵:۵۶ - تاریخ: ۱۳۹۴/۰۹/۱۲
با تشکر از پاسخ خوبتون.
فکر کنم برای اینکه از , به جای - استفاده کنیم مجبور شدیم از تابع REPLACE(sub, '-', ',') استفاده کنیم.
پس اگه از همون اول اطلاعات توی ستون Sub به صورت 10,11,12 استفاده کنیم، بهتره این طور نیست؟
که تابع به صورت زیر درمیاد:
$res=mysql_query("SELECT * FROM tbl_name WHERE `cat` = '1' AND find_in_set('10', sub) ORDER BY `id` DESC ");

به نظر شما این از لحاظ سرعت جستجو بهتره یا بالایی؟
ممنونم از لطف شما.
پاسخ: 
قاعدتا هرچه توابع کمتری در پرس و جو استفاده شود، بر روی سرعت کار، اثر مثبت خواهد داشت، لذا در صورتی که علت خاصی بین استفاده از علامت ها مطرح نیست، می توانید از , استفاده کنید (البته برای این مورد افزایش سرعت در حد ناچیز خواهد بود!)
نکته: بهتر است از اکستنش mysqli به جای اکستنشن mysql (که قدیمی است و صرفا جنبه آموزشی دارد) در پروژه های جدید استفاده کنید!
نویسنده: میثم
زمان: ۰۹:۴۲:۵۱ - تاریخ: ۱۳۹۴/۰۹/۱۳
از راهنمایی خوبتون ممنونم.
اره قدیمی شده اما بنده نه sqli بلدم و نه pdo .
کاش توی آموزش هایی که قرار میدین این دو مقوله هم اضافه کنید.
ممنونم از محبت شما.
پاسخ: 
mysqli با mysql (در شکل معمولی) تفاوت زیادی ندارد، آموزش های لازم در وب در حد رفع نیاز موجود است!
نویسنده: آموزش php
زمان: ۱۵:۴۹:۱۲ - تاریخ: ۱۳۹۴/۰۹/۱۵
خدا خیرتون بده عالی هست آموزش ها
نویسنده: مهدی
زمان: ۱۴:۳۵:۵۷ - تاریخ: ۱۳۹۴/۰۹/۲۹
سلام خدمت شما و تشکر از سایت عالی تون
بسیاری از مشکلاتی را که داشتم تونستم از این جا حلشون کنم.
یه سوال داشتم. برای کم حجم کردن کد html سایت کدهای زیادی هست اما من فقط می خوام که خط هایی که خالی هستند ، حذف بشن و کدها بیان اول هر سطر . برای مثال :
<pre class="code"> 
<------ فاصله -----><div id="content" class="home clearfix">
<-- سطر خالی -->
<-- سطر خالی -->
<---- فاصله ----><div id="columns" class="clearfix">
<-- فاصله --><div id="left"></pre>
این جوری کم حجم شه :
<pre class="code">
<div id="content" class="home clearfix">
<div id="columns" class="clearfix">
<div id="left"></pre>
</pre>
پاسخ: 
سلام
لطفا سوالات را در مطالب مرتبط یا حداقل نزدیک به مبحث مطرح کنید!
برای این کار ابتدا از فایل یا فایل ها پشتیبان تهیه کنید! سپس با استفاده از امکانات برنامه ++Notepad ابتدا در قسمت Edit گزینه Blank Operations امکان Trim Leading and Trailing Space را انتخاب کنید، سپس از سربرگ Search گزینه Replace در کادر باز شده، در فیلد Find what کلیک کرده و یک بار کلید Space را بزنید، سپس بر روی Replace All کلیک کنید تا تمام فضاهای خالی اضافه حذف شوند!
نویسنده: مهدی
زمان: ۰۰:۱۶:۵۸ - تاریخ: ۱۳۹۴/۱۰/۰۱
با سلام و عرض پوزش از اینکه این سوالو در اینجا مطرح کردم.
من منظورم این بود که با استفاده از دستورات php و به صورت آنلاین این کارو انجام بدیم. الان شما سورس این سایتو نگاه کنید :
bbsub.ir
برای کم حجم سازی html این صفحه کد php می خوام. خیلی ممنون از اینکه راهنمایی کنید.
پاسخ: 
سلام
می توانید از نمونه کد زیر استفاده کنید:
<?php
$str = '<b> </b>
<strong></strong> ';
function trimHTML($str){
$str = preg_replace('/[[:blank:]]+/', '', $str);
return $str;
}
echo trimHTML($str);
?>
البته برای ساخت ابزار آنلاین باید کدنویسی های مربوط به بخش آپلود فایل و استخراج محتویات فایل به صورت متنی و سپس عبور از تابع فوق و در نهایت ایجاد خروجی نهایی را کدنویسی کنید!، یک راه حل جایگزین و بهتر فعال کردن حالت gzip در سرور است (باعث فشرده شدن خروجی سرور در هنگام ارسال به مرورگر می شود (البته در شکل ظاهری سورس تغییری ایجاد نمی شود!)).
paged صفحه 1 از 2




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

6 × 8
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...