🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ امیرحسین شکری
خروجی توابع array_push و array_pop
میثم حل شده توسط میثم

عرض سلام و احترام.
چرا خروجی دو تابع array_push و array_pop چنانچه مستقیما درون تابع A قرار میگرفتند، فرق داشت؟
 

سلام 

تابع array_push عنصری رو به ارایه اضافه میکنه و array_pop اخرین عنصر رو از ارایه حذف میکنه و هر کدام یک ارایه خروجی میدهند 

منظورتون رو درست متوجه نشدم اما اگر کد زیر رو بنویسید : 

<?php 
function A($value){
    echo "<pre>";
        var_dump($value);
    echo "</pre>";
}
$arr = ['a','b','c','d','e'];
array_push($arr,'f');
A($arr);
echo "<br>";
array_pop($arr);
A($arr);
echo "<br>";

چنین خروجی رو به شما میده : 

 array_push : 
array (size=6)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'c' (length=1)
  3 => string 'd' (length=1)
  4 => string 'e' (length=1)
  5 => string 'f' (length=1)
 array_pop : 
array (size=5)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'c' (length=1)
  3 => string 'd' (length=1)
  4 => string 'e' (length=1)

در ابتدا ارایه ای ساخته شده که شامل حروف a - e  هستش و سپس با تابع array_push به این ارایه حرف f رو هم اضافه کرده و در خروجی مشاهده میکنید که یک عنصر جدید به ارایه اضافه شده 

و بعد از این با تابع array_pop اخرین عنصر از ارایه ای که f به اون اضافه شده حذف کردم مشاهده میکنید دوباره همان ارایه اول رو به ما داده و خروجی‌های این دو تابع درون تابع A ریخته شده و وردامپ شده 

دقیقا شما کجا ایراد دارین ؟ 

میثم ۱۹ تیر ۱۳۹۹، ۱۴:۰۱

سلام و عرض ادب میثم جان. ببخشید که همیشه زحمت سوالات من گردن شماست. آره کلیت موضوع رو متوجه شدم. مشکلم اونجاییه که طبق گفته استاد، این دو خط توی مثال ویدیو:

A(array_push($arr3,"pink","brown"));

و

array_push($arr3,"pink","brown");
A($arr3);

نتایج متفاوتی رو میدن (کد دوم شبیه همون کدیه که شما زحمت کشیدین نوشتین، اولی اما نتیجه ۶ رو برمیگردونه و به عبارتی count میکنه)
همین منوال برای تابع array_pop هم هست.
من هر چی ساختار تابع A رو نگاه کردم علت تفاوت رو نفهمیدم.

امیرحسین شکری ۱۹ تیر ۱۳۹۹، ۱۸:۵۳

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

به دلیل اینکه زمانی که شما تابع array_pop و نیز array_push رو مستقیم داخل تابع A میزارید تعداد عنصر‌ها رو بر میگردونه. 

تابع A مشکلی نداره 

شما دقت کنید زمانی که بصورت مستقیم میزارید خروجی خود تابع array_push رو براتون بر میگردونه که تعداد عناصر ارایس. 

اما شما زمانی که 

$arr3

رو داخل تابع A میریزید خود ارایه ای که داخلش تغیری ایجاد کردید دارید ور دامپ میکنید

<?php 
function A($value){
    echo "<pre>";
        var_dump($value);
    echo "</pre>";
}
$arr = ['a','b','c','d','e'];
array_push($arr,'f');
A($arr);
echo "<br>";
array_pop($arr);
A($arr);
echo "<br>";

توی کد بالا اگر متغیر $arr رو بزاریم داخل تابع A خروجی همون ارایه است که ما ساختیم و تغیرات توش ایجاد کردیم : 

array (size=6)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'c' (length=1)
  3 => string 'd' (length=1)
  4 => string 'e' (length=1)
  5 => string 'f' (length=1)

اما اگر بیایم و مستقیما array_push یا array_pop رو قرار بدیم خروجی توابع array_push , array_pop رو بهمون میده نه ارایه رو 

بهترین پاسخ
میثم ۱۹ تیر ۱۳۹۹، ۱۹:۱۷