SplObjectStorage
इसका नाम क्या है: वस्तुओं को संग्रहित करने के लिए एक भंडारण वर्ग। कुछ अन्य प्रोग्रामिंग भाषाओं के विपरीत strings
PHP में ऑब्जेक्ट्स नहीं हैं, वे हैं, ठीक है, तार ;-)। इसलिए SplObjectStorage
में तारों को स्टोर करने का कोई मतलब नहीं है - भले ही आप कक्षा stdClass
कक्षा के किसी ऑब्जेक्ट में अपने तार लपेटें।
कुंजी के साथ-साथ मान के रूप में स्ट्रिंग के साथ सरणी (जैसे हैशटेबल्स) का उपयोग करने के लिए अद्वितीय स्ट्रिंग्स सी संग्रह का संग्रह करने का सबसे अच्छा तरीका (जैसा कि Ian Selby द्वारा सुझाया गया है)।
$myStrings = array();
$myStrings['string1'] = 'string1';
$myStrings['string2'] = 'string2';
// ...
आप फिर भी एक कस्टम वर्ग में इस कार्यक्षमता लपेट सकता है:
class UniqueStringStorage // perhaps implement Iterator
{
protected $_strings = array();
public function add($string)
{
if (!array_key_exists($string, $this->_strings)) {
$this->_strings[$string] = $string;
} else {
//.. handle error condition "adding same string twice", e.g. throw exception
}
return $this;
}
public function toArray()
{
return $this->_strings;
}
// ...
}
जिस तरह से आप सान पीएचपी < 5.3.0 और के लिए SplObjectStorage
के व्यवहार अनुकरण करके यह क्या का एक बेहतर समझ पाने के लिए कर देता है।
$ob1 = new stdClass();
$id1 = spl_object_hash($ob1);
$ob2 = new stdClass();
$id2 = spl_object_hash($ob2);
$objects = array(
$id1 => $ob1,
$id2 => $ob2
);
SplObjectStorage
भंडार के प्रत्येक उदाहरण (जैसे spl_object_hash()
) के लिए एक अनूठा हैश वस्तु उदाहरणों की पहचान करने में सक्षम हो। जैसा कि मैंने उपर्युक्त कहा है: एक स्ट्रिंग बिल्कुल एक वस्तु नहीं है, इसलिए इसका कोई उदाहरण हैश नहीं है।स्ट्रिंग मानों की तुलना करके एक स्ट्रिंग की विशिष्टता की जांच की जा सकती है - दो स्ट्रिंग बराबर होती हैं जब उनमें बाइट्स का एक ही सेट होता है।
स्रोत
2009-10-01 08:08:57
आप कुछ नमूना प्रदान कर सकते हैं अद्वितीय तारों के सेट को स्टोर करने के तरीके पर कोड और फिर उन पर फिर से शुरू करें? PHP में इतना मुश्किल क्यों है ?? – erotsppa
क्या आप उन्हें सिर्फ एक सरणी में स्टोर नहीं कर सके? ऐसा लगता है कि आप चीजों को थोड़ा जटिल बना रहे हैं;) –