পিএইচপি 7.2 এর জন্য আপডেট হয়েছে
পিএইচপি .2.২ বস্তু এবং অ্যারে কাস্টগুলিতে সংখ্যার কীগুলিতে রূপান্তর করার জন্য একটি আচরণগত পরিবর্তন প্রবর্তন করেছিল , যা এই নির্দিষ্ট অসঙ্গতিটি সংশোধন করে এবং নিম্নলিখিত সমস্ত উদাহরণকে প্রত্যাশার সাথে আচরণ করে।
আরও একটি বিষয় সম্পর্কে বিভ্রান্ত হতে হবে!
আসল উত্তর (7.2.0 এর আগের সংস্করণগুলিতে প্রযোজ্য)
পিএইচপি-র অন্ধকার এলির অংশ রয়েছে যা আপনি সত্যই নিজেকে ভিতরে খুঁজে পেতে চান না। নামগুলির সাথে সম্বোধনযুক্ত বৈশিষ্ট্যগুলি এর মধ্যে একটি ...
যা তারা আপনাকে কখনও বলেনি
ঘটনা # 1: আপনি সহজেই আইনী পরিবর্তনশীল নাম নয় এমন নামগুলির সাথে সম্পত্তিগুলিতে অ্যাক্সেস করতে পারবেন না
$a = array('123' => '123', '123foo' => '123foo');
$o = (object)$a;
echo $o->123foo;
ঘটনা # 2: আপনি কোঁকড়ানো ব্রেস সিনট্যাক্স সহ এই জাতীয় বৈশিষ্ট্য অ্যাক্সেস করতে পারেন
$a = array('123' => '123', '123foo' => '123foo');
$o = (object)$a;
echo $o->{'123foo'};
ফ্যাক্ট # 3: কিন্তু না যদি সম্পত্তি নাম ভাবে সংখ্যা বসিয়ে হয়!
$a = array('123' => '123', '123foo' => '123foo');
$o = (object)$a;
echo $o->{'123foo'};
echo $o->{'123'};
সরাসরি উদাহরণ ।
ঘটনা # 4: আচ্ছা, যদি না বস্তুটি প্রথম স্থানটিতে অ্যারে থেকে না আসে।
$a = array('123' => '123');
$o1 = (object)$a;
$o2 = new stdClass;
$o2->{'123'} = '123';
echo $o1->{'123'};
echo $o2->{'123'};
সরাসরি উদাহরণ ।
খুব স্বজ্ঞাত, আপনি একমত না?
তুমি কি করতে পার
বিকল্প # 1: এটি ম্যানুয়ালি করুন
সর্বাধিক ব্যবহারিক পদ্ধতিটি হ'ল আপনার আগ্রহী অবজেক্টটিকে কোনও অ্যারেতে ফিরিয়ে দেওয়া, যা আপনাকে বৈশিষ্ট্যগুলি অ্যাক্সেস করার অনুমতি দেবে:
$a = array('123' => '123', '123foo' => '123foo');
$o = (object)$a;
$a = (array)$o;
echo $o->{'123'};
echo $a['123'];
দুর্ভাগ্যক্রমে, এটি পুনরাবৃত্তির সাথে কাজ করে না। সুতরাং আপনার ক্ষেত্রে আপনার মতো কিছু করা দরকার:
$highlighting = (array)$myVar->highlighting;
$data = (array)$highlighting['448364']->Data;
$value = $data['0'];
বিকল্প # 2: পারমাণবিক বিকল্প
বিকল্প পদ্ধতি হ'ল একটি ফাংশন লিখুন যা বস্তুগুলিকে পুনরাবৃত্তিতে অ্যারেতে রূপান্তর করে:
function recursive_cast_to_array($o) {
$a = (array)$o;
foreach ($a as &$value) {
if (is_object($value)) {
$value = recursive_cast_to_array($value);
}
}
return $a;
}
$arr = recursive_cast_to_array($myVar);
$value = $arr['highlighting']['448364']['Data']['0'];
তবে, আমি নিশ্চিত নই যে বোর্ড জুড়ে এটি একটি আরও ভাল বিকল্প কারণ এটি অনাবশ্যকভাবে যে সমস্ত সম্পত্তি আপনার আগ্রহী নয় ততগুলি আপনার নিজেরাই আগ্রহী নয় এমন সমস্ত ধরণের অ্যারে চালিয়ে যাবে ।
বিকল্প # 3: এটি চালাক খেলছে
পূর্ববর্তী বিকল্পের একটি বিকল্প হ'ল অন্তর্নির্মিত জেএসওএন কার্যাদি ব্যবহার করা:
$arr = json_decode(json_encode($myVar), true);
$value = $arr['highlighting']['448364']['Data']['0'];
JSON ফাংশনগুলি কোনও বাহ্যিক ফাংশন সংজ্ঞায়নের প্রয়োজন ছাড়াই সহায়কভাবে অ্যারেতে পুনরাবৃত্ত রূপান্তর সম্পাদন করে। তবে এটি দেখতে পছন্দসই, এতে বিকল্প # 2 এর "নিউক" অসুবিধা রয়েছে এবং এটির পাশাপাশি অসুবিধাও হ'ল যদি আপনার বস্তুর অভ্যন্তরে কোনও স্ট্রিং থাকে তবে সেই স্ট্রিংগুলি অবশ্যই ইউটিএফ -8 এ এনকোড করা উচিত (এটি একটি প্রয়োজন json_encode
)।