2012-03-21 14 views
14

पायथन में मैं त्रुटि के बिना किसी शब्दकोश से मूल्य प्राप्त करने के लिए "प्राप्त करें" विधि का उपयोग कर सकता हूं।PHP: पाइथन में सरणी मान प्राप्त करें?

a = {1: "a", 2: "b"} 
a[3] # error 
a.get(3, "") # I got empty string. 

तो मैं एक आम/आधार समारोह है कि ऐसा करने के लिए खोज:

function GetItem($Arr, $Key, $Default){ 
    $res = ''; 
    if (array_key_exists($Key, $Arr)) { 
     $res = $Arr[$Key]; 
    } else { 
     $res = $Default; 
    } 
    return $res; 
} 

अजगर में के रूप में PHP में मूल रूप से एक ही समारोह है?

धन्यवाद: dd

+1

सरणी की कुंजी का उपयोग करके मूल्य प्राप्त करने के लिए आपको फ़ंक्शन की आवश्यकता क्यों है। $ a ['key'] इस – zod

+1

@zod के साथ क्या गलत है: यदि कुंजी मौजूद नहीं है, तो आपको एक PHP त्रुटि मिलती है। नीचे दिए गए उत्तरों में से किसी एक फ़ंक्शन का उपयोग करने से आपको त्रुटि संदेश की बजाय डिफ़ॉल्ट मान प्राप्त करने की अनुमति मिलती है। –

उत्तर

10

isset() आम तौर पर array_key_exists() से तेज है। पैरामीटर $default छोड़े जाने पर खाली स्ट्रिंग में प्रारंभ किया गया है।

function getItem($array, $key, $default = "") { 
    return isset($array[$key]) ? $array[$key] : $default; 
} 

// Call as 
$array = array("abc" => 123, "def" => 455); 
echo getItem($array, "xyz", "not here"); 
// "not here" 

हालांकि, एक सरणी कुंजी मौजूद है, लेकिन एक शून्य मान है, तो isset() जिस तरह से आप उम्मीद करते हैं, व्यवहार नहीं होगा के रूप में यह NULL व्यवहार करेगा जैसे कि यह अस्तित्व में नहीं है और $default लौट आते हैं। यदि आप सरणी में NULL s की अपेक्षा करते हैं, तो आपको इसके बजाय array_key_exists() का उपयोग करना होगा।

function getItem($array, $key, $default = "") { 
    return array_key_exists($key, $array) ? $array[$key] : $default; 
} 
+2

मैंने एक और सहायक कार्य किया जो सरल है और कम तर्कों की आवश्यकता है: http://stackoverflow.com/a/25205195/1890285 – stepmuel

0

मेरे मन में है कि करने के लिए कोई आधार कार्य है।

आपका GetItem आप चाहते हैं कि क्या करना करने के लिए :)

2

नहीं काफी एक अच्छा तरीका है। यह वही व्यवहार करना चाहिए। के रूप में $res में हर कोड पथ परिणाम ओवरराइट किया जा रहा

function GetItem($Arr, $Key, $Default = ''){ 
    if (array_key_exists($Key, $Arr)) { 
     $res = $Arr[$Key]; 
    } else { 
     $res = $Default; 
    } 
    return $res; 
} 

अपने समारोह में पहली पंक्ति, बेकार है। यह चाल ऊपर के रूप में $Default पैरामीटर वैकल्पिक बनाने के लिए है।

ध्यान रखें कि array_key_exists() का उपयोग करके महत्वपूर्ण मंदी हो सकती है, खासकर बड़े सरणी पर। एक वैकल्पिक:

function GetItem($Arr, $Key, $Default = '') { 
    return isset($Arr[$Key]) ? $Arr[$Key] : $Default; 
} 
0

हां। या

function GetItem($Arr, $Key, $Default) { 
    return array_key_exists($Key, $Arr) 
     ? $Arr[$Key] 
     : $Default; 
} 
संबंधित मुद्दे