PHP ऑब्जेक्ट को एरे में बदलें: 3 कारगर तरीके

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

ऑब्जेक्ट से एरे तक: क्यों ज़रूरी है और कैसे बचें गलतियों से

\n\n

हर PHP डेवलपर को कभी न कभी यह समस्या आती है: एक ऑब्जेक्ट है (जैसे API, डेटाबेस या लाइब्रेरी से), लेकिन हमें एक सामान्य एसोसिएटिव एरे चाहिए। यह एक आसान काम लगता है, लेकिन छोटी-छोटी गलतियाँ डेटा लॉस, अनपेक्षित टाइप या गंभीर एरर का कारण बन सकती हैं।

\n\n

इस लेख में हम PHP ऑब्जेक्ट को एसोसिएटिव एरे में बदलने के तीन मुख्य तरीकों पर चर्चा करेंगे, उनकी परफॉरमेंस, डेप्थ प्रोसेसिंग और संभावित समस्याओं की तुलना करेंगे। आप जानेंगे कि 90% कामों के लिए कौन सा तरीका सबसे अच्छा है और कौन सा सिर्फ प्रयोगों के लिए छोड़ देना चाहिए। चलिए शुरू करते हैं!

\n\n

तरीका 1: जादुई टाइप कास्टिंग (array)

\n\n

सबसे आसान और छोटा तरीका है टाइप कास्टिंग का उपयोग: (array) $object। यह तरीका PHP में बिल्ट-इन है और बिना किसी अतिरिक्त कोड के काम करता है। आइए एक उदाहरण देखें।

\n\n
<?php\n$user = new stdClass();\n$user->name = 'राहुल';\n$user->age = 28;\n$user->email = 'rahul@example.com';\n\n$array = (array) $user;\nprint_r($array);\n?>
\n\n

परिणाम:

\n\n
Array\n(\n    [name] => राहुल\n    [age] => 28\n    [email] => rahul@example.com\n)
\n\n

बिल्कुल सही लगता है? लगभग। लेकिन कुछ बारीकियाँ हैं।

\n\n

(array) तरीके के फायदे

\n
    \n
  • सरलता और गति — एक ही ऑपरेशन, कोई लूप नहीं।
  • \n
  • किसी भी ऑब्जेक्ट पर काम करता है, जिसमें कस्टम क्लास के इंस्टेंस शामिल हैं।
  • \n
  • ऑब्जेक्ट के public-प्रॉपर्टी को सुरक्षित रखता है।
  • \n
\n\n

नुकसान और सावधानियाँ

\n
    \n
  • रिकर्सिव नहीं है — अगर प्रॉपर्टी खुद एक ऑब्जेक्ट है, तो वह एरे में नहीं बदलेगी। आपको एरे के अंदर एक नेस्टेड ऑब्जेक्ट मिलेगा।
  • \n
  • private/protected प्रॉपर्टी की समस्या — ये एरे में आती हैं, लेकिन उनके नाम में null कैरेक्टर (\\0) होते हैं। इससे सीरियलाइज़ेशन टूट जाता है।
  • \n
  • कीज़ में बदलाव — बिल्ट-इन क्लासेज (DateTime, PDOStatement) के लिए व्यवहार अनपेक्षित हो सकता है।
  • \n
\n\n

private प्रॉपर्टी की समस्या का उदाहरण:

\n\n
<?php\nclass User {\n    public $name = 'सुरेश';\n    private $password = 'secret123';\n}\n\n$user = new User();\n$array = (array) $user;\nvar_dump(array_keys($array));\n// आउटपुट: array(2) { [0]=> string(4) "name" [1]=> string(17) "\\0User\\0password" }\n?>
\n\n

जैसा कि आप देख सकते हैं, की \\0User\\0password — यह वह नहीं है जो आप अपने कोड में देखना चाहेंगे।

\n\n

तरीका 2: JSON-ब्रिज (json_decode + json_encode)

\n\n

दूसरा लोकप्रिय तरीका है पहले ऑब्जेक्ट को JSON में सीरियलाइज़ करना, फिर उसे एरे में डीकोड करना। यह रिकर्सन और private प्रॉपर्टी की समस्या को हल करता है, लेकिन इसमें अतिरिक्त ओवरहेड आता है।

\n\n
<?php\n$object = new stdClass();\n$object->name = 'प्रिया';\n$object->skills = ['PHP', 'JavaScript', 'Python'];\n\n$array = json_decode(json_encode($object), true);\nprint_r($array);\n?>
\n\n

परिणाम:

\n\n
Array\n(\n    [name] => प्रिया\n    [skills] => Array\n        (\n            [0] => PHP\n            [1] => JavaScript\n            [2] => Python\n        )\n)
\n\n

अब नेस्टेड एरे skills भी एरे बन गया है, ऑब्जेक्ट नहीं। बहुत बढ़िया!

\n\n

यह तरीका कब काम आता है

\n
    \n
  • गहराई से नेस्टेड स्ट्रक्चर — रिकर्सन अपने आप हैंडल हो जाता है।
  • \n
  • डेटा की सफाई — कीज़ में कोई सर्विस कैरेक्टर नहीं।
  • \n
  • संगतता — अगर आप पहले से JSON (API, डेटाबेस) के साथ काम कर रहे हैं, तो यह स्वाभाविक विकल्प है।
  • \n
\n\n

JSON तरीके की कमियाँ

\n
    \n
  • टाइप का नुकसान — पूर्णांक वैसे ही रहेंगे, लेकिन DateTime जैसे ऑब्जेक्ट स्ट्रिंग में बदल जाएँगे। मेथड वाले ऑब्जेक्ट अपना व्यवहार खो देंगे।
  • \n

ब्लॉग

पुस्तक अनुशंसाएँ