साफ़ नहीं है सबसे पहले मुझे यह उल्लेख करने की आवश्यकता है कि मैंने मैन्युअल और PHP दस्तावेज़ों में खोला और जवाब नहीं मिला। यहाँ है एक कोड मैं का उपयोग करें:array_diff_uassoc का व्यवहार
class chomik {
public $state = 'normal';
public $name = 'no name';
public function __construct($name) {
$this->name = $name;
}
public function __toString() {
return $this->name . " - " . $this->state;
}
}
function compare($a, $b) {
echo("$a : $b<br/>");
if($a != $b) {
return 0;
}
else return 1;
}
$chomik = new chomik('a');
$a = array(5, $chomik, $chomik, $chomik);
$b = array($chomik, 'b', 'c', 'd');
array_diff_uassoc($a, $b, 'compare');
मैं क्या सोचा, array_diff_uassoc इन दो सरणियों के सभी मूल्यों की तुलना करेंगे, और अगर मान मौजूद है, तो कुंजी तुलना चलेंगे। और इस कोड का आउटपुट है:
1 : 0
3 : 1
2 : 1
3 : 2
1 : 0
3 : 1
2 : 1
3 : 2
3 : 3
3 : 2
2 : 3
1 : 3
0 : 3
तो सबसे पहले कुछ जोड़े (1: 0 या 3: 1) डुप्लीकेट क्यों हैं? क्या इसका मतलब यह है कि फ़ंक्शन भूल गया है कि यह पहले से ही इस आइटम की तुलना करता है? मैंने सोचा कि यह सभी बराबर मूल्य वाले जोड़ों की तुलना करेगा, लेकिन मैं इसे आउटपुट में नहीं देखता हूं। क्या मैं कुछ भूल रहा हूँ?
तो प्रश्न यह है कि तुलना के क्रम में इस कार्य का सटीक व्यवहार क्या है, और मैं यह डुप्लीकेट क्यों देखता हूं? (मेरे PHP संस्करण है, अगर यह मदद करता है: PHP संस्करण 5.3.6-13ubuntu3.6)
मैं वास्तव में उलझन में हूँ, और इसके बारे में कुछ अच्छा स्पष्टीकरण के लिए इंतज़ार कर ...
आपको शायद सख्त तुलना का उपयोग करना चाहिए!तुलनात्मक कार्य में == नहीं ==। –
तुलना इस मामले में ईमानदार होने का एक बड़ा सौदा नहीं है। मैं सोच रहा हूं कि तुलना करते समय 'echo' ऐसे परिणामों को क्यों प्रिंट कर रहा है। और 'echo' तुलना से पहले ट्रिगर किया गया है, इससे कोई फर्क नहीं पड़ता कि यह सख्त है या नहीं। – Karol
जो मैं इस कोड को लिखना चाहता था वह है: मैं केवल इन तत्वों को चाहता हूं जो दूसरे सरणी में नहीं हैं ($ a [0]), और यदि वे दूसरे सरणी में हैं, तो मैं इन तत्वों को चाहता हूं जिनके पास एक ही कुंजी है (अनुक्रमणिका) ... तो निश्चित रूप से फ़ंक्शन को केवल $ [0] – Karol