मेरे पास कई उपश्रेणियाँ हैं जिनमें कई उपश्रेणियाँ हैं, प्रत्येक उप श्रेणियों की अपनी उप श्रेणियां हैं और इसी तरह ...
array(1) {
["categories"]=>array(11) {
[0]=>array(4) {
["id"]=>int(368)
["name"]=>string(8) "Aksesuar"
["parentId"]=>NULL
["subCategories"]=>array(15) {
[0]=>
array(4) {
["id"]=>
int(387)
["name"]=>
string(4) "Saat"
["parentId"]=>
int(368)
["subCategories"]=>
array(0) {
}
}
[1]=>
array(4) {
["id"]=>
int(394)
["name"]=>
string(6) "Şapka"
["parentId"]=>
int(368)
["subCategories"]=>
array(0) {
}
}
[2]=>
array(4) {
["id"]=>
int(396)
["name"]=>
string(17) "Takı & Mücevher"
["parentId"]=>
int(368)
["subCategories"]=>
array(17) {
[0]=>
array(4) {
["id"]=>
int(397)
["name"]=>
string(8) "Bileklik"
["parentId"]=>
int(396)
["subCategories"]=>
array(7) {
[0]=>
array(4) {
["id"]=>
int(1238)
["name"]=>
string(15) "Altın Bileklik"
["parentId"]=>
int(397)
["subCategories"]=>
array(0) {
}
}
इस उपश्रेणियों में से प्रत्येक में पेरेंट आईडी है जो मूल श्रेणी को इंगित करता है, अधिकांश शीर्ष मूल श्रेणी में पैरेंट आईडी शून्य है। मुझे एक पुनरावर्ती फ़ंक्शन की आवश्यकता है जिसे मैं उपश्रेणी की आईडी और श्रेणियों की सरणी के रूप में पैरामीटर दूंगा, और यह इसके सम्मान उपश्रेणियों के साथ मूल श्रेणियों की सरणी लौटाएगा।
function recursive($needle, $array, $id, $holder = [])
{
$holder = [];
foreach ($array as $key => $value) {
if ($key == $needle && $value == $id) {
$holder = array_merge($holder, $array);
}
if (is_array($value)) {
$holder = array_merge($holder, recursive($needle, $value, $id, $holder));
}
}
return $holder;
}
$res = recursive('id', $categories, 5208);
उपरोक्त फ़ंक्शन केवल उप श्रेणियों के साथ मूल श्रेणी की सरणी लौटाता है।
1 उत्तर
मुझे पूरी तरह से यकीन नहीं है कि 'धारक' फ़ंक्शन चर का उपयोग क्या था, क्योंकि आप इसे प्रत्येक कॉल पर एक खाली सरणी पर रीसेट करते हैं, इसलिए मैंने इसे पूरी तरह से हटा दिया।
function recursive(string $needle, array $categories, $id): ?array
{
foreach ($categories as $cat) {
if (array_key_exists($needle, $cat) && $cat[$needle] === $id) {
// make sure that if correct category is found,
// no subcategories will be included
unset($cat['subCategories']);
return $cat;
} else {
$subCat = recursive($needle, $cat['subCategories'], $id);
// if the $subCat is not null, it indicates the category
// with the correct id, or one of it's parent has been found
if ($subCat !== null) {
$cat['subCategories'] = $subCat;
return $cat;
}
}
}
return null;
}
यह वास्तव में इतना जटिल नहीं है, फ़ंक्शन एक सरणी देता है यदि आईडी उसमें पाई गई थी या एक यदि यह बच्चे हैं, या NULL यदि कुछ भी नहीं मिला है।
फ़ंक्शन प्रदान किए गए स्तर के लिए श्रेणियों पर लूप करता है, और यह जांचता है कि वर्तमान स्तर में प्रदान की गई आईडी है या नहीं। यदि नहीं, तो यह सभी उपश्रेणियों को खोजेगा। यदि उपश्रेणी में कुछ पाया जाता है, तो यह वर्तमान उपश्रेणियों को लौटाए गए उपश्रेणियों से बदल देगा और श्रेणी को भी वापस कर देगा।
यदि आप किसी वर्ग को किसी श्रेणी के चारों ओर लपेटते हैं तो यह और भी साफ हो सकता है, लेकिन इससे काम पूरा हो जाना चाहिए। कृपया मुझे बताएं कि क्या आपके कोई और प्रश्न हो सकते हैं।
पूर्ण रेप्रो केस के लिए यह 3v4l देखें।
संबंधित सवाल
नए सवाल
php
PHP एक व्यापक रूप से उपयोग किया जाता है, उच्च-स्तरीय, गतिशील, वस्तु-उन्मुख, और व्याख्या की गई स्क्रिप्टिंग भाषा मुख्य रूप से सर्वर-साइड वेब विकास के लिए डिज़ाइन की गई है। PHP भाषा के बारे में सवालों के लिए इस्तेमाल किया।