मेरे पास 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],
);
php
0
calin24 1 अक्टूबर 2021, 22:35
1
आप सरणियों को मर्ज नहीं कर रहे हैं, आप $data_one के संपूर्ण मान को $data_two से बदल रहे हैं।
 – 
Barmar
1 अक्टूबर 2021, 22:38
1
यदि आप सरणियों को मर्ज करना चाहते हैं तो array_merge() का प्रयोग करें।
 – 
Barmar
1 अक्टूबर 2021, 22:38
क्षमा करें, array_merge() इसके लिए सही नहीं है। मैंने सोचा कि यह एक सहयोगी सरणी थी।
 – 
Barmar
1 अक्टूबर 2021, 22:44
कोई अंतर्निहित फ़ंक्शन नहीं है जो इसके लिए काम करेगा, आपको एक लूप लिखना होगा। या आप सरणियों को साहचर्य में बदल सकते हैं, उन्हें मर्ज कर सकते हैं, फिर वापस 2-आयामी में बदल सकते हैं।
 – 
Barmar
1 अक्टूबर 2021, 22:45
साथ ही, array_merge() कुंजियां संख्या होने पर प्रतिस्थापन नहीं करेंगे। यह कुंजियों को अनदेखा करता है और केवल मानों को एक नई सरणी में संयोजित करता है जिसकी कुंजियाँ 0 से शुरू होती हैं।
 – 
Barmar
1 अक्टूबर 2021, 22:46

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;
    }
}
0
Barmar 1 अक्टूबर 2021, 22:49

सरणी संघ ऑपरेटर 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 + प्रकार)।

0
hakre 2 अक्टूबर 2021, 05:32