شنبه یه خبراییه 🔥 منتظر شنبه باش 😉🥳
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ شعبان زاده
خطای دستور echo در تبدیل مستقیم آرایه به آبجکت
جامعه پی اچ پی ایجاد شده در ۱۲ دی ۱۴۰۱

سلام . روز شما بخیر

زمانی که یک آرایه از php را بصورت مستقیم به یک آبجکت stdClass تبدیل می‌کنم ، و می‌خواهم با دستور echo به یک اندیس خاص آدرس دهی کنم مفسر خطا می‌دهد . به این مضمون که دستور echo نمی‌تواند برای nonObject class استفاده شود . درصورتی که در خروجی std class چاپ می‌شود . ساختار به این شکل است که خطا می‌دهد :

$array_sampel = array(
    "user1" => 
    [ 
        "name" => [
            "firstName" => "ali",
            "lastName" => "shabanzade"
          ],
        "email" => "ali@gmail.com",
        "age"   => 24
    
    ],
    "2" => 
    [ 
        "name" => "mohsen",
        "email" => "mohsen@gmail.com",
        "age"  => 22
    ]
);
print_r($array_sampel);
echo "";
echo "
";
// php array to json object (javascript array)
$php_array_to_json = json_encode($array_sampel);
echo $php_array_to_json;// vaghti 1 php array be json tabdil mishavad mitavan an ra ba dastoore echo chap kard
echo "";
echo "
";
// json object to php array
// json to associative php array
$json_object_to_associative_array_in_php = json_decode($php_array_to_json ,1 );
print_r($json_object_to_associative_array_in_php);
echo "
";
echo ($array_sampel["user1"]["name"]["firstName"]);
echo "
";
echo "";
// json to non associative php array  OR std class 
$json_object_to_php_non_associtive_array_std_class = json_decode($php_array_to_json);
print_r ($json_object_to_php_non_associtive_array_std_class);
echo "
";
echo ($json_object_to_php_non_associtive_array_std_class -> user1 -> name -> firstName);
echo "
";
//if index in std class is a number , so that be in curly bracket {2}
echo ($json_object_to_php_non_associtive_array_std_class -> {2} -> email);
echo "
";
echo "
";
echo "";
// Conversion php array to php std object without change to json:
$php_array_to_php_object_without_json = (object)$array_sampel;
print_r($php_array_to_php_object_without_json);
echo "
";
var_dump($php_array_to_php_object_without_json -> user1 -> name -> firstName );

در صورتیکه در حالت json to std object class هست ، در دستور echo میتوان از ساختار بالا استفاده کرد و از یک اندیس خاص خروجی گرفت .در ضمن نسخه php 7.4 دارم.

با سپاس

سلام علی عزیز

ببین ساختار‌ها متفاوته

68db-Screenshot_۲۰۲۳-۰۱-۰۲-۱۳-۳۶-۲۵-۹۸۸-edit_com.android.chrome.jpg

توی stdclass object‌ها ما میتونیم به مقدارها مستقیم دسترسی داشته باشیم چون کل ایندکس‌ها رو در اخیارمون قرار میده.

ولی در object stdclass‌ها فقط آرایه اول به طور مستقیم در دسترس قرار میگیره و کلیدهای داخلی باید بطور ایندکس صدا زده بشن

کد زیر رو ببین:

var_dump($php_array_to_php_object_without_json->user1['name']['firstName']);
احمدرضا فاطمی کیا ۱۲ دی ۱۴۰۱، ۱۰:۱۱

سلام احمد جان . وقت بخیر

شما درست می‌گی .

وقتی از json به object تبدیل می‌کنیم ، تمام آرایه‌ها و بعد‌های داخلی اونها ( زیر شاخه‌های هر آرایه )‌ به StdObject Class تبدیل می‌شوند . اما زمانی که بصورت مستقیم و بدون تبدیل کردن به json و با استفاده از (object) یک آرایه را به StdClass تبدیل می‌کنیم ، تنها آرایه‌های تک بعدی تبدیل به stdclass میشوند و آرایه‌های زیر شاخه اون آرایه‌ها بصورت آرایه باقی می‌مونند. البته استاد صالحی در درس ساختار‌های تصمیم توضیح دادند .


اما یک سوال : چرا باید برای انجام یک عملیات خاص باید آرایه associativ array را به StdClass تبدیل کرد ؟ فقط بدلیل اینکه syntax اون فرق می‌کنه یا اینکه امکانات بیشتری در stdClass در دسترس برنامه نویس است؟

با سپاس از پاسخت احمد جان .

شعبان زاده ۱۲ دی ۱۴۰۱، ۱۹:۱۷

اکثر اوقات برای فهم راحت‌تر و ساختار بهتر std class‌ها هست اما گاهی اوقات مثل این مورد ممکنه تفاوت ساختاری باشه و مشکل ما با این تفاوتشون حل بشه.(جایگزینی برای آرایه‌های انجمنی هستن.)

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

بهترین پاسخ
احمدرضا فاطمی کیا ۱۲ دی ۱۴۰۱، ۱۹:۴۷

سلام . صبحت بخیر احمد رضا جان . خیلی ممنون از پاسخت . موفق باشی .

شعبان زاده ۱۳ دی ۱۴۰۱، ۰۶:۲۴