۶ M-Fallah
سوال: آرایه ها
جامعه پی اچ پی ایجاد شده در ۲۶ مهر ۱۴۰۱

سلام، وقت بخیر

Strings containing valid decimal ints,
 unless the number is preceded by a + sign, will be cast to the int type.
 E.g. the key "8" will actually be stored under 8.
 On the other hand "08" will not be cast, as it isn't a valid decimal integer.


در عبارت بالا، منظور از اینکه the key "8" will actually be stored under 8 " کلید هشت در واقع زیر هشت ذخیره میشود " چیست؟

ممنون میشم به طور کلی توضیح بدید تا بتونم بیشتر درک کنم. اگر یک مثال هم بیاورید که عالی میشود.

سلام دوست عزیز

منظورش اینه اگر کلید آرایه رو string 8 بذارید میاد اون رو با type casting تبدیل میکنه به 8

مثال زیر رو برید اجرا کنید متوجه میشید

$array = [
    1 => 'Mohammad',
    '1' => 'reza'
];
print_r($array);
محمد گازری ۲۶ مهر ۱۴۰۱، ۰۶:۵۴

درود جناب گازری

ممنونم از توضیح تون، بله متوجه شدم.

( داخل متن اصلی علامت دابل کوت " منظورش string بود که من دقت نکرده بودم.)

ممنونم از شما.

M-Fallah ۲۶ مهر ۱۴۰۱، ۱۸:۴۰

یک سوال دیگه که به همین موضوع مربوط میشه تقریبا:

اینجا گفته شده که:

Floats are also cast to ints,
 which means that the fractional part will be truncated.
 E.g. the key 8.7 will actually be stored under 8.

که حاصل میشه کد زیر: (قطعه کد اول)

$x = array(
    2.5 => 1.5, 
);
var_dump($x);
///output
array(1) {
  [2]=>
  float(1.5)
}

و با توجه به اینکه داخل یک آرایه ی associative اگر برای مقادیرداخل آرایه، ایندکسی تعریف نکنیم خود php از صفر شروع به مقدار گذاری میکنه مانند زیر: (قطعه کد دوم)

$i = array(
    "a" => 1.5,
    "b" => 2.5,
    "c" => 3.5,
    4.6
);
///output
Array
(
    [a] => 1.5
    [b] => 2.5
    [c] => 3.5
    [0] => 4.6
)

اما با توجه به قطعه کد اول که ابتدای بحث آورده شد،

خروجی عبارت زیر متفاوت است: (قطعه کد سوم)

$a = array(
    2.5 => 1.5,
    6.5
);
///output
Array
(
    [2] => 1.5
    [3] => 6.5
)

این بخش برام سوال ایجاد کرده که، 1/ وقتی عدد 2.5 به 2 تغییر پیدا میکنه و قسمت کسری کوتاه میشه. پس مقدار 6.5 باید کوتاه بشه و به 6 تغییر پیدا کنه.

2/ و یا اگر قرار باشه به صورت خودکار مقدار کلید از صفر شروع بشه مانند قطعه کد دوم که بالاتر هست، پس چرا از سه شروع شده که ادامه ی قبلی هستش؟

ممنون میشم در این مورد پاسخ و تحلیلتون رو بگید که بدونم چیزی که خودم از این موضوع درک کردم چقدر درست هست و یا چه تفاوتی داره.


ممنونم از شما.

M-Fallah ۲۶ مهر ۱۴۰۱، ۱۹:۱۹

سلام مجدد

۱. مقدار کست نمیشه و فقط کلید کست میشه (مقدار داده حساس و مفسر کاری بهش نداره)

۲. چون آخرین کلید رو ۲ گرفته و بعلاوه ۱ کرده!

مثال زیر بهت کمک میکنه

$array = [
    2 => 'Mohammad'
];
$array[] = 'Gazori';
print_r($array);


محمد گازری ۲۸ مهر ۱۴۰۱، ۰۸:۴۰

درود جناب گازری،

نکته اول که فرمودید رو متوجه شدم.

ولی در مورد نکته گفتم که "آخرین کلید رو دو گرفته و بعلاوه یک کرده" سوالم دقیقا همین جا هست که چرا بعلاوه یک کرده!؟

مگه نباید وقتی کلیدی تعریف نمیکنی از صفر شروع به کلید گذاری بشه (در آرایه‌های associative) !؟


یعنی میشه اینطور گفت اگر کلیدها در یک آرایه از نوع عددی باشند، به صورت پیشفرض برای ساخت کلید بعدی کلید فعلی رو بعلاوه یک میکنه.

M-Fallah ۲۸ مهر ۱۴۰۱، ۰۸:۵۳

بله دقیقا

علت این مورد هم اینه که به conflict نخوره ممکنه هزاران کلید خالی و پر وسطش باشه و این بخواد اون‌ها رو پر کنه ممکنه به مشکل بخوره علاوه بر این ممکنه خود شما در طی برنامه چند عضو از آرایه رو حذف کرده باشید و بخواید چند عضو دیگه هم اضافه کنید در این صورت مفسر اعداد جدید نسبت میده که مدیریتش هم راحت تره

محمد گازری ۲۹ مهر ۱۴۰۱، ۰۶:۴۱