php - How can I return all combinations of a given string? (ex. 'foo bar' = bar, bar_foo, foo) -
यह प्रश्न ऊपर सुझाए गए प्रश्न का डुप्लिकेट नहीं है। शीर्षक ध्वनि हो सकता है समान है, लेकिन इसका उत्तर किसी भी तरह से नीचे दिए गए प्रश्न में वर्णित परिणाम को नहीं लेता है।
मुझे एक अज्ञात लंबाई की सरणी तारों के अनूठे संयोजन बनाएं क्या आप मदद कर सकते हैं?
लक्ष्य को foo bar
की तरह एक स्ट्रिंग लेना है और इस स्ट्रिंग से अद्वितीय संयोजन बनाएं:
foo bar bar_foo ( कार बार जोड़ें
वापस आना चाहिए:
जोड़ add_bar add_car add_bar_car bar bar_car कार
यहां मेरी प्रगति है:
फ़ंक्शन स्ट्रिंग_बिल्डर ($ लंबाई) {$ arrWords = array ('add' 'बार', 'कार', 'ओस', 'खाने', 'वसा', 'जिम', 'हे', 'स्याही', 'जेट', 'कुंजी', 'लोग इन', 'पागल', ' झपकी ',' अजीब ',' दोस्त ',' QAT ',' राम ',' देखा ',' तन ',' कलश ',' डॉक्टर ',' शादी ',' Xis ',' याप ',' चिड़ियाघर ' ); $ Arr = सरणी (); के लिए ($ i = 0; $ i & lt; $ लम्बाई; $ i ++) {$ arr [] = $ आर्डर [$ i]; } वापसी implode ('', $ arr); } समारोह get_combinations ($ स्ट्रिंग) {$ combinations = array (); // यहां सभी संयोजनों को डाल दें $ arr = विस्फोट ('', $ स्ट्रिंग); $ Arr = array_unique ($ arr); // केवल अद्वितीय शब्द महत्वपूर्ण सॉर्ट हैं ($ arr); // अद्वितीय संयोजन बनाने के लिए alphabetize आसान (नहीं permutations) $ arr = array_values ($ arr); // रीसेट कुंजी के लिए ($ i = 0; $ i & lt; गिनती ($ arr); $ i ++) {// यह वह जगह है जहाँ मैं फँस गया हूं / / मैं एक सरणी के सभी संभव संयोजनों के माध्यम से बार-बार कैसे लूप करूँ? } वापसी के संयोजन; } // झसे आज़माओ! ($ I = 1; $ i & lt; 26; $ i ++) के लिए {$ string = string_builder ($ i); $ संयोजन = get_combinations ($ स्ट्रिंग); इको $ i "शब्द \ t" गणना ($ संयोजन) "संयोजन \ t" $ स्ट्रिंग "\ N"; // print_r ($ संयोजन); }
एक अन्य प्रयास:
फ़ंक्शन getCombinations2 ($ str, $ min_length = 2) {$ शब्द = विस्फोट ('', $ str ); $ संयोजन = सरणी (); $ लेन = गणना ($ शब्द); ($ A = $ min_length; $ a & lt; = $ min_length; $ a ++) {के लिए ($ pos = 0; $ pos & lt; $ len; $ pos ++) {if (($ pos + $ a -1 ) & Lt; $ len) {$ tmp = array_slice ($ शब्द, $ pos, $ a); प्रकार ($ tmp); $ Tmp = implode ('_', $ tmp); $ संयोजन [] = $ tmp; }}} $ संयोजन = अरैम ($ संयोजन); $ संयोजन वापस; }
जब आप संयोजन को प्रिंट करते हैं और कुछ युग्मों को देखना चाहते हैं, तो आप सफल हो सकते हैं (उदाहरण के लिए, "फेट_ ज़ू", "कार_टीन")। मेरे दोनों प्रयासों में इनमें से कई दिखाई देंगे, लेकिन कभी भी ये नहीं।
एक और हो सकता है सुरुचिपूर्ण समाधान है, लेकिन मैंने इसे 2 फ़ंक्शन के साथ किया है।
getCombosOfLength फ़ंक्शन सरणी के भीतर हर $ intlength संयोजन देता है। GetCombos फ़ंक्शन सिर्फ आप चाहते हैं कि प्रत्येक लंबाई के लिए GetCombosOfLength चलाता है। यह 1-5 आइटम वाले सभी संयोजनों को उत्पन्न करने के लिए बहुत अच्छी तरह से काम करता है। यदि आप इसे सभी 25-आइटम संयोजनों के लिए चलाते हैं, तो इसमें कुछ समस्याएं हैं।
$ a = सरणी ("c", "b", "f", "v", "g" , "ए", "एच", "आई", "जे", "के", "एल", "एम", "एन", "पी", "ओ", "आर", "ए", " Q "," s "," t "," u "," w "," x "," y "," z "); $ बी = मिलकॉम्बोस ($ a, 5); प्रिंट "& lt; पूर्व & gt; \ n"; print_r ($ ख); फ़ंक्शन getCombos ($ arrInput, $ intMax = शून्य) {सॉर्ट ($ arrInput); अगर (is_null ($ intMax)) $ intMax = गणना ($ arrInput); $ ArrOutput = array (); ($ I = $ intMax; $ i & gt; 0; $ i--) {$ arrReturn = getCombosOfLength ($ arrInput, $ i) के लिए; के लिए ($ j = 0; $ j & lt; गिनती ($ arrReturn); $ j ++) $ arrOutput [] = $ arrReturn [$ j]; } वापसी $ arrOutput; } फ़ंक्शन getCombosOfLength ($ arrInput, $ intLength) {$ arrOutput = array (); यदि ($ intLength == 1) {for ($ i = 0; $ i & lt; गिनती ($ arrInput); $ i ++) $ arrOutput [] = सरणी ($ arrInput [$ i]); वापसी $ arrOutput; } $ ArrShift = $ arrInput; जबकि (गणना ($ arrShift)) {$ x = array_shift ($ arrShift); $ ArrReturn = getCombosOfLength ($ arrShift, $ intLength - 1); के लिए ($ i = 0; $ i & lt; गिनती ($ arrReturn); $ i ++) {array_unshift ($ arrReturn [$ i], $ x); $ ArrOutput [] = $ arrReturn [$ i]; }} वापसी $ arrOutput; }
Comments
Post a Comment