2011-09-30 9 views
7

क्या कोई मुझे समझा सकता है कि आप संदर्भ के रूप में कुंजी क्यों नहीं दे सकते?संदर्भ के अनुसार कुंजी और मूल्य दोनों को पास करने के विकल्प:

पूर्व:

if(is_array($where)){ 
    foreach($where as &$key => &$value){ 
     $key = sec($key); 
     $value = sec($value); 
    } 
    unset($key, $value); 
} 

फेंकता:

Fatal error: Key element cannot be a reference in linkstest.php on line 2 

मैं array_map का उपयोग कर कुछ इसी तरह कर सकता हूँ? मैं बस एक एसोसिएटिव सरणी पर पुनरावृत्ति करना चाहता हूं, और मेरे सेक() फ़ंक्शन के साथ कुंजी और मान दोनों से बचें। मुझे समझने के लिए

सरणी नक्शा मुश्किल है:

मैं array_map साथ बहुत सी बातें की कोशिश की है, लेकिन मैं इसे चाबियाँ पर सीधे कार्य करने के लिए नहीं मिल सकता है।

क्या मुझे केवल फ़ोरैच लूप का उपयोग करने से सरणी मानचित्र का उपयोग करके कोई प्रदर्शन लाभ मिलेगा?

मैं foreach के बारे में क्या पसंद नहीं है कि मैं सरणी पर सीधे कार्य नहीं कर सकते हैं, और अस्थायी सरणियों बनाने और उन्हें unsetting से निपटने के लिए है:

foreach($where as $key => $value){ 
$where[secure($key)] = secure($value); 
} 

यह अगर यह कुछ पाता है असफल हो सकता है कुंजी में भागने, एक नया तत्व जोड़ने, और अनचाहे रखने के लिए।

तो क्या मैं इस तरह से कुछ अटक गया हूँ?

$temparr = array(); 
foreach($where as $key => $value){ 
$temparr[secure($key)] = secure($value); 
} 
$where = $temparr; 
unset($temparr); 

कोई विकल्प?

+0

यह एक बड़ा पुराना * क्यों * योग्य है? क्या होगा यदि 'sec ($ key) 'परिणाम किसी अन्य मौजूदा कुंजी के मान में हैं? क्या आप मौजूदा कुंजी को अभी ओवरराइट करते हैं? आपको यह बताने की जरूरत है कि आपके आवेदन में क्यों एक कुंजी खतरनाक हो सकती है। – webbiedave

+0

यह खतरनाक क्यों नहीं हो सकता है? आप फ़ॉर्म पर $ _POST कुंजी आसानी से बदल सकते हैं, या Tamperdata जैसे कुछ के साथ। कुछ चाबियाँ जो मैं mysql प्रश्नों में उपयोग करता हूं। – Ben

+0

मैंने यह नहीं कहा कि वे नहीं हो सकते थे। मैंने कहा कि आपको यह बताने की जरूरत है कि * आपके आवेदन * में एक कुंजी खतरनाक क्यों हो सकती है। इससे हमें आपकी स्थिति के लिए उपयोग करने का सबसे अच्छा तरीका बताएगा। – webbiedave

उत्तर

8

कारण है कि आप संदर्भ के रूप में एक महत्वपूर्ण पारित नहीं हो सकता किसी ने मुझे बता सकते हैं?

क्योंकि भाषा इस समर्थन नहीं करता। अधिकांश भाषाओं में यह क्षमता खोजने के लिए आपको कठोर दबाव डाला जाएगा, इसलिए कुंजी शब्द।

तो मैं कुछ इस तरह के साथ फंस कर रहा हूँ?

हां। उपयुक्त कुंजी के साथ एक नई सरणी बनाने का सबसे अच्छा तरीका है।

किसी भी विकल्प?

बेहतर विकल्प प्रदान करने का एकमात्र तरीका आपकी विशिष्ट स्थिति को जानना है। अपनी चाबी तालिका स्तंभ नाम के लिए नक्शे है, तो सबसे अच्छा तरीका चाबियाँ छोड़ के रूप में है और उन्हें अपने एसक्यूएल में उपयोग की उनके समय में से बचने के लिए है।

0

ऐसा करने में कोई समस्या क्यों है? इसे एक समारोह बनाओ। एक फ़ंक्शन एक इनपुट लेता है और आउटपुट देता है। आपका फ़ंक्शन इनपुट आपकी "असुरक्षित" सरणी होगी। आपका आउटपुट सरणी को सुरक्षित करने का परिणाम होगा।

तो फिर तुम सिर्फ

$where = secureMyArray($where); 

करना इसलिए आप कार्यों करने की क्षमता है ...

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