PHP

2010-04-20 2 views
61

का उपयोग करके वर्णमाला में अगला अक्षर प्राप्त करने का सबसे प्रभावी तरीका एक से ज़ेड के किसी भी चरित्र को देखते हुए, PHP का उपयोग करके वर्णमाला में अगला अक्षर प्राप्त करने का सबसे प्रभावी तरीका क्या है?PHP

उत्तर

101

मेरी राय में ऐसा करने का सबसे कारगर तरीका सिर्फ बढ़ाने के स्ट्रिंग चर है।

$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]; 
} 
+0

@ माथीस पूर्व और मिश्रण वृद्धि के साथ एक मामूली त्रुटि थी। इसे '$ b = ++ $ a में बदलें; ' – nickf

+0

@ माथीस: मेरा बुरा ... आपको पूर्व-वृद्धि का उपयोग करना चाहिए:' $ b = ++ $ a; ' @nickf: धन्यवाद :) – codaddict

+0

आपका कोड नमूना गलत है। '$ next_ch = $ ch ++;' '$ next_ch' में वृद्धि किए गए मान को संग्रहीत नहीं करेगा, लेकिन * वास्तव में' $ ch' में वृद्धि होगी। एक सेकंड के लिए मुझे उलझन में :) महान टिप हालांकि, मुझे नहीं पता था कि यह भी संभव था। निश्चित रूप से इसे करने का सबसे प्रभावी तरीका! –

8

अच्छा, यह निर्भर करता है कि आप "किनारे के मामलों" के साथ वास्तव में क्या करना चाहते हैं। जब आप 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'; 

ये हैं:

आप एक ही मामले की अगली चरित्र की जरूरत है, तो आप शायद सिर्फ सरल जांच उपरोक्त पंक्ति के बाद जोड़ सकते हैं बहुत ही सरल संचालन, मैं वास्तव में इस तरह के मामले में दक्षता के बारे में चिंता नहीं करता।

+0

मुझे एक ही मामले के साथ अगला पत्र चाहिए। यदि चरित्र 'z' है, तो मैं' a' की अपेक्षा करता हूं। –

+0

क्या चरित्र 'Z' या 'z' होने पर तुरंत 'ए' या' ए 'वापस करने के लिए तेज़ नहीं होगा? –

14

यह है कि तुम क्या जब तुम जेड हिट करना चाहते हैं इस पर निर्भर करता है, लेकिन आप कुछ ही विकल्प हैं:

$chars = range('a', 'z'); // ['a', 'b', 'c', 'd', ...] 
5

कैसे के बारे में:

$nextChar = chr(ord($currChar) + 1); // "a" -> "b", "z" -> "{" 

तुम भी पीएचपी के range() समारोह का उपयोग कर सकता ord() and chr() का उपयोग कर?

<?php 
    $next = chr(ord($prev)+1); 
?> 
+0

लघु और प्यारा! लेकिन किनारे के मामलों के बारे में क्या ('z' को 'ए' वापस करना चाहिए)? क्या 'if()' कथन के अलावा अन्य के लिए जांच करने का कोई बेहतर तरीका है? –

+1

$ अगला = ($ prev == 'z')? 'ए': सीआर (ord ($ prev) +1); – Anax

+0

इसके लिए धन्यवाद @ एनाक्स – Jamus

3

जब से मैं केवल इस मामले में लोअरकेस वर्णों के बारे में परवाह है, मैं निम्नलिखित कोड, जवाब यहां पोस्ट के आधार पर उपयोग करेंगे!

3
$val = 'z'; 
echo chr((((ord($val) - 97) + 1) % 26) + 97); 

अच्छा और आसान :-)

+0

और 'Z' के लिए उपयोग करना होगा, यह $ $ अगला = chr ((((ord ($ c) - 65) + 1)% 26) + 65); यानी ord ('ए') – loretoparisi

0

सभी पत्र की एक सरणी बनाएँ, मौजूदा पत्र के लिए खोज और अपनी अगली पत्र वापस जाएँ। यदि आप अंतिम पत्र तक पहुंचते हैं तो पहला पत्र लौटाएं।

संबंधित मुद्दे