मेरे पास php 7.4.16 में दो सरणियाँ हैं
$data_one = array(
['id' => 491, 'default' => false],
['id' => 492, 'default' => false],
['id' => 493, 'default' => true],
);
तथा
$data_two = array(
['id' => 491, 'default' => false],
['id' => 492, 'default' => true],
['id' => 493, 'default' => false],
['id' => 494, 'default' => false],
);
मैं स्प्रेड ऑपरेटर का उपयोग कर रहा हूं:
$data_one = [...$data_two];
लापता सरणी को आईडी 494 के साथ $data_one .... में जोड़ रहा है, लेकिन $data_one में "डिफ़ॉल्ट" के मान को भी अधिलेखित कर रहा है। (आईडी 492 के साथ पहली सरणी में डिफ़ॉल्ट सत्य हो जाएगा, और आईडी 493 गलत हो जाएगा)
मैं $data_two से $data_one में नई प्रविष्टियां कैसे जोड़ सकता हूं लेकिन मूल मान ("डिफ़ॉल्ट") को $data_one से कैसे रख सकता हूं?
** अपडेट करें **
अंतिम सरणी इस तरह दिखनी चाहिए
$data_one = array(
['id' => 491, 'default' => false],
['id' => 492, 'default' => false],
['id' => 493, 'default' => true],
['id' => 494, 'default' => false],
);
2 जवाब
$data_two
में तत्वों के माध्यम से लूप करें। जांचें कि क्या इसका id
पहले से $data_one
में मौजूद है। यदि नहीं, तो जोड़ें।
$ids = array_column($data_one, 'id');
foreach ($data_two as $item) {
if (!in_array($item['id'], $ids)) {
$data_one[] = $item;
}
}
सरणी संघ ऑपरेटर id-indexed $data_one
और $data_two
सरणियों के साथ $data_two
दायीं ओर होने के कारण:
$id = 'id';
$idx = static fn(array $data) => array_column($data, null, $id);
$result = [
... $idx($data_one)
+ $idx($data_two)
];
केवल नई संस्थाओं के मान (उनकी id द्वारा पहचान) संलग्न हैं।
सभी id
पूर्णांक होने चाहिए।
यदि आप परिणामी सरणी कुंजियों में रुचि नहीं रखते हैं, तो आप उन्हें भी रख सकते हैं:
$id = 'id';
$idx = static fn(array $data) => array_column($data, null, $id);
$result = $idx($data_one)
+ $idx($data_two)
;
और 3v4l.org पर एक अधिक सामान्य PHP कोड उदाहरण: https://3v4l.org/2Lk8R (PHP 5.5 + प्रकार)।
संबंधित सवाल
नए सवाल
php
PHP एक व्यापक रूप से उपयोग किया जाता है, उच्च-स्तरीय, गतिशील, वस्तु-उन्मुख, और व्याख्या की गई स्क्रिप्टिंग भाषा मुख्य रूप से सर्वर-साइड वेब विकास के लिए डिज़ाइन की गई है। PHP भाषा के बारे में सवालों के लिए इस्तेमाल किया।
$data_one
के संपूर्ण मान को$data_two
से बदल रहे हैं।array_merge()
का प्रयोग करें।array_merge()
इसके लिए सही नहीं है। मैंने सोचा कि यह एक सहयोगी सरणी थी।array_merge()
कुंजियां संख्या होने पर प्रतिस्थापन नहीं करेंगे। यह कुंजियों को अनदेखा करता है और केवल मानों को एक नई सरणी में संयोजित करता है जिसकी कुंजियाँ0
से शुरू होती हैं।