arrays - Php सरणी कुंजी में वर्णित वर्ण?




key (7)

मेरे पास कुछ php सरणी कुंजी हैं जो बहुत सारे अजीब पात्रों के साथ आबादी में हैं।

क्या यह अनुमति है? क्या कोई ऐसी बाधाएं हैं जिनका मैं उपयोग नहीं कर सकता?


Answers

मुझे यह जवाब मिला कि मेरी समस्या पर अधिक जानकारी की तलाश है। मैं उन में यूटीएफ -8 अक्षरों के साथ स्ट्रिंग का उपयोग कर रहा था, जो मेरे पास एक सरणी के लिए कुंजी के रूप में काम नहीं करेगा।

कुछ इस तरह

$str = "R&D - Solution";
$arr = array( "R&D - Solution" => "Research" );
echo $arr[$str];  // did not work

मेरे लिए (बड़ा या चालाक नहीं) समाधान यह करना था ..

$str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str];  // works!

PHP सरणी कुंजी पूर्णांक या स्ट्रिंग हो सकती है। PHP तार बाइट एरे हैं, जिसका मतलब बाइट्स के अनुक्रम हैं। अन्य प्रकार के तार नहीं हैं और PHP अन्यथा सरणी कुंजी तारों पर कोई विशेष प्रतिबंध लगाता नहीं है। दूसरे शब्दों में: जब तक यह एक स्ट्रिंग है, कुछ भी चला जाता है।


manual मुताबिक:

कुंजी या तो एक पूर्णांक या एक स्ट्रिंग हो सकता है। मूल्य किसी भी प्रकार का हो सकता है।

इसके अतिरिक्त निम्नलिखित कुंजी कास्ट होगा:

  • वैध पूर्णांक वाले स्ट्रिंग को पूर्णांक प्रकार में डाला जाएगा। जैसे कुंजी "8" वास्तव में 8 के तहत संग्रहीत किया जाएगा। दूसरी तरफ "08" नहीं डाला जाएगा, क्योंकि यह वैध दशमलव पूर्णांक नहीं है।
  • फ्लोट्स को पूर्णांक में भी डाला जाता है, जिसका अर्थ है कि आंशिक भाग छोटा कर दिया जाएगा। जैसे कुंजी 8.7 वास्तव में 8 के तहत संग्रहीत किया जाएगा।
  • बूल को पूर्णांक में भी डाला जाता है, यानी मुख्य सत्य वास्तव में 1 के तहत संग्रहीत किया जाएगा और 0 के नीचे कुंजी झूठी होगी।
  • नल खाली स्ट्रिंग पर डाला जाएगा, यानी कुंजी नल वास्तव में "" के तहत संग्रहीत किया जाएगा।
  • Arrays और वस्तुओं कुंजी के रूप में इस्तेमाल नहीं किया जा सकता है। ऐसा करने से एक चेतावनी होगी: अवैध ऑफ़सेट प्रकार।

मैनुअल again :

एक स्ट्रिंग वर्णों की श्रृंखला है, जहां एक चरित्र बाइट के समान होता है। इसका मतलब है कि PHP केवल 256-वर्ण सेट का समर्थन करता है, और इसलिए मूल यूनिकोड समर्थन प्रदान नहीं करता है। स्ट्रिंग प्रकार के विवरण देखें।

तो संक्षेप में, कोई भी स्ट्रिंग एक कुंजी हो सकती है। और एक स्ट्रिंग में कोई बाइनरी डेटा हो सकता है (2 जीबी तक)। इसलिए, एक कुंजी कोई बाइनरी डेटा हो सकती है (चूंकि एक स्ट्रिंग कोई बाइनरी डेटा हो सकती है)।

सरणी कुंजी के कुछ यादृच्छिक (वैध) दुरुपयोग:

$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);

आप किसी भी PHP स्ट्रिंग में सामान डाल सकते हैं जिसे सरणी कुंजी के रूप में उपयोग किया जा सकता है। अनुमत वर्णों पर कोई सीमा नहीं है।

$a = array();

$x = 'long string of random garage';
echo $a[$x]; // this is ok

$x = array();
echo $a[$x]; // not ok

सभी उत्तरों के अलावा वे सत्य हैं: आप पीएसआर का उपयोग कर सकते हैं कि वे एक अच्छा और मानक कोडिंग शैली रखने के लिए सर्वश्रेष्ठ प्रोग्रामर के बीच कुछ प्रकार के नियम हैं।


कुंजी एक स्ट्रिंग या एक पूर्णांक होना चाहिए। कुछ ऐसे स्थान हैं जो होते हैं, लेकिन मुझे लगता है कि मैनुअल व्याख्या करने का अच्छा काम करता है:

कुंजी या तो एक पूर्णांक या एक स्ट्रिंग हो सकता है। मूल्य किसी भी प्रकार का हो सकता है।

इसके अतिरिक्त निम्नलिखित कुंजी कास्ट होगा:

  • वैध पूर्णांक वाले स्ट्रिंग को पूर्णांक प्रकार में डाला जाएगा। जैसे कुंजी "8" वास्तव में 8 के तहत संग्रहीत किया जाएगा। दूसरी तरफ "08" नहीं डाला जाएगा, क्योंकि यह वैध दशमलव पूर्णांक नहीं है।
  • फ्लोट्स को पूर्णांक में भी डाला जाता है, जिसका अर्थ है कि आंशिक भाग छोटा कर दिया जाएगा। जैसे कुंजी 8.7 वास्तव में 8 के तहत संग्रहीत किया जाएगा।
  • बूल को पूर्णांक में भी डाला जाता है, यानी मुख्य सत्य वास्तव में 1 के तहत संग्रहीत किया जाएगा और 0 के नीचे कुंजी झूठी होगी।
  • नल खाली स्ट्रिंग पर डाला जाएगा, यानी कुंजी नल वास्तव में "" के तहत संग्रहीत किया जाएगा।
  • Arrays और वस्तुओं कुंजी के रूप में इस्तेमाल नहीं किया जा सकता है। ऐसा करने से एक चेतावनी होगी: अवैध ऑफ़सेट प्रकार।

मैं बस कहना चाहूंगा कि मेरे पास एक विशेष ऑब्जेक्ट था, जिसमें परिवर्तनीय गुण थे (यह मूल रूप से एक टेबल मैप कर रहा था और मैं तालिका में कॉलम बदल रहा था, इसलिए तालिका में प्रतिबिंबित करने वाले ऑब्जेक्ट में गुण अलग-अलग होंगे

class obj {
    protected $fields = array('field1','field2');
    protected $field1 = array();
    protected $field2 = array();
    protected loadfields(){} 
    // This will load the $field1 and $field2 with rows of data for the column they describe
    protected function clearFields($num){
        foreach($fields as $field) {
            unset($this->$field[$num]); 
            // This did not work the line below worked
            unset($this->{$field}[$num]); // You have to resolve $field first using {}
        }
    }
}

$ फ़ील्ड का पूरा उद्देश्य बस इतना था कि जब कोड बदलते हैं तो मुझे कोड में हर जगह देखने की ज़रूरत नहीं है, मैं बस कक्षा की शुरुआत को देखता हूं और गुणों की सूची बदलता हूं और $ फ़ील्ड सरणी सामग्री को प्रतिबिंबित करता हूं नए गुण

इसे समझने के लिए मुझे थोड़ी देर लग गई। उम्मीद है कि यह किसी की मदद कर सकता है।





php arrays key