का उपयोग करके वर्णमाला में अगला अक्षर प्राप्त करने का सबसे प्रभावी तरीका एक से ज़ेड के किसी भी चरित्र को देखते हुए, PHP का उपयोग करके वर्णमाला में अगला अक्षर प्राप्त करने का सबसे प्रभावी तरीका क्या है?PHP
PHP
उत्तर
मेरी राय में ऐसा करने का सबसे कारगर तरीका सिर्फ बढ़ाने के स्ट्रिंग चर है।
$str = 'a';
echo ++$str; // prints 'b'
$str = 'z';
echo ++$str; // prints 'aa'
रूप incrementing 'z'
'aa'
देना यदि आप यह नहीं चाहता, लेकिन इसके बजाय एक 'a'
आप बस जिसके परिणामस्वरूप स्ट्रिंग की लंबाई की जाँच कर सकते प्राप्त करने के लिए रीसेट करना चाहते हैं और अगर इसके >1
इसे रीसेट देखा।
function nextLetter(&$str) {
$str = ('z' === $str ? 'a' : ++$str);
}
मदद के लिए धन्यवाद, दोस्तों:
$ch = 'a';
$next_ch = ++$ch;
if (strlen($next_ch) > 1) { // if you go beyond z or Z reset to a or A
$next_ch = $next_ch[0];
}
अच्छा, यह निर्भर करता है कि आप "किनारे के मामलों" के साथ वास्तव में क्या करना चाहते हैं। जब आप z
या Z
पर चरित्र का अनुमान लगाते हैं तो आप क्या परिणाम देते हैं? क्या आप का अगला अक्षर, या केवल अगले अक्षर, अवधि चाहते हैं?
इसका जवाब जानने के बिना, बहुत ही बुनियादी मामले के लिए, तो आप सिर्फ यह कर सकते हैं:
$next_character = chr(ord($current_character) + 1);
लेकिन जब आप Z
पर हैं यह आप [
दे देंगे, और z
आप {
दे देंगे, ASCII मूल्यों के अनुसार।
संपादित टिप्पणी के अनुसार:
if ($next_character == '[')
$next_character = 'A';
else if ($next_character == '{')
$next_character = 'a';
ये हैं:
आप एक ही मामले की अगली चरित्र की जरूरत है, तो आप शायद सिर्फ सरल जांच उपरोक्त पंक्ति के बाद जोड़ सकते हैं बहुत ही सरल संचालन, मैं वास्तव में इस तरह के मामले में दक्षता के बारे में चिंता नहीं करता।
मुझे एक ही मामले के साथ अगला पत्र चाहिए। यदि चरित्र 'z' है, तो मैं' a' की अपेक्षा करता हूं। –
क्या चरित्र 'Z' या 'z' होने पर तुरंत 'ए' या' ए 'वापस करने के लिए तेज़ नहीं होगा? –
यह है कि तुम क्या जब तुम जेड हिट करना चाहते हैं इस पर निर्भर करता है, लेकिन आप कुछ ही विकल्प हैं:
$chars = range('a', 'z'); // ['a', 'b', 'c', 'd', ...]
कैसे के बारे में:
$nextChar = chr(ord($currChar) + 1); // "a" -> "b", "z" -> "{"
तुम भी पीएचपी के range()
समारोह का उपयोग कर सकता ord() and chr() का उपयोग कर?
<?php
$next = chr(ord($prev)+1);
?>
जब से मैं केवल इस मामले में लोअरकेस वर्णों के बारे में परवाह है, मैं निम्नलिखित कोड, जवाब यहां पोस्ट के आधार पर उपयोग करेंगे!
$val = 'z';
echo chr((((ord($val) - 97) + 1) % 26) + 97);
अच्छा और आसान :-)
और 'Z' के लिए उपयोग करना होगा, यह $ $ अगला = chr ((((ord ($ c) - 65) + 1)% 26) + 65); यानी ord ('ए') – loretoparisi
सभी पत्र की एक सरणी बनाएँ, मौजूदा पत्र के लिए खोज और अपनी अगली पत्र वापस जाएँ। यदि आप अंतिम पत्र तक पहुंचते हैं तो पहला पत्र लौटाएं।
@ माथीस पूर्व और मिश्रण वृद्धि के साथ एक मामूली त्रुटि थी। इसे '$ b = ++ $ a में बदलें; ' – nickf
@ माथीस: मेरा बुरा ... आपको पूर्व-वृद्धि का उपयोग करना चाहिए:' $ b = ++ $ a; ' @nickf: धन्यवाद :) – codaddict
आपका कोड नमूना गलत है। '$ next_ch = $ ch ++;' '$ next_ch' में वृद्धि किए गए मान को संग्रहीत नहीं करेगा, लेकिन * वास्तव में' $ ch' में वृद्धि होगी। एक सेकंड के लिए मुझे उलझन में :) महान टिप हालांकि, मुझे नहीं पता था कि यह भी संभव था। निश्चित रूप से इसे करने का सबसे प्रभावी तरीका! –