2013-03-18 4 views
6

द्वारा बहुआयामी सरणी में गतिशील रूप से मूल्य कैसे सेट करें यह सब शाम मुझे पागल कर रहा है। मूल रूप से, मुझे मूल्य को वैध करने के बाद एक बहुआयामी सरणी में एक विशिष्ट मान सेट करने की आवश्यकता होती है और फिर फिर से (हो सकता है, सत्यापन पर निर्भर करता है; यदि प्रमाणीकरण विफल हुआ है तो मान को मान्य करने के बाद मान को खाली स्ट्रिंग पर सेट करने की आवश्यकता है)। मान लीजिए कि मैं इस पोस्ट सरणी है करते हैं:संदर्भ

$data['should']['be']['int'] = ' yjd'; 

filter_var($value, FILTER_SANITIZE_NUMBER_INT); साथ मूल्य sanitizing बाद मैं कोई रिक्त स्ट्रिंग वापस हो रही है। इसके बाद मुझे किसी खाली स्ट्रिंग के लिए $data['should']['be']['int'] पर मान सेट करने की आवश्यकता होगी।

यह मान तब एक सत्यापन समारोह में पारित हो जाता है, जो विफल रहता है, क्योंकि खाली स्ट्रिंग एक पूर्णांक नहीं है। फिर, उस मान्य मान को $data['should']['be']['int'] में रिक्त स्ट्रिंग में सेट करने की आवश्यकता होगी।

से पहले पूरे सत्यापन बात की शुरूआत की मैं एक सरणी में सभी प्रासंगिक कुंजी बचत कर रहा हूँ, और समय के मैं स्वच्छ या मान्य मैं इस उपलब्ध की तरह कुछ मिल गया है की जरूरत है:

$keys = array(
    0 => 'should', 
    1 => 'be', 
    2 => 'int' 
); 

मैं नए मान को सेट करने के लिए &$data सरणी को संदर्भित करके फोरैच लूप में उपरोक्त कुंजियों का उपयोग करके $data सरणी तक पहुंचने का प्रयास किया है, लेकिन मैंने जो भी प्रयास किया है, इससे कोई फर्क नहीं पड़ता। उपर्युक्त सिर्फ एक सरलीकृत उदाहरण है। पूरी बात एक सत्यापन वर्ग का हिस्सा है, इसलिए मुझे पास $data सरणी की सटीक गहराई नहीं पता है।

किसी भी पॉइंटर्स की बहुत सराहना की जाएगी! आपकी सहायताके लिए धन्यवाद!

संपादित करें: सोचा कि मैं पोस्ट संपादित नहीं कर सका, लेकिन यह मेरा इंटरनेट कनेक्शन होने लगा। कृपया नीचे मेरी टिप्पणी को नजरअंदाज करें।

protected function set_value(&$data, $value) { 
    foreach($data as &$val) { 
     if(is_array($val)) { 
      $this->set_value($val, $value); 
     } else { 
      $val = $value; 
     } 
    } 
} 

पाश शुरू करने के लिए मैं इस किया था: वैसे भी, यहाँ एक विधि है कि मैं रिकर्सिवली कॉल करने की कोशिश है

$this->set_value($data[$keys[0]], $value); 
+1

अधिक कोड है कि आप की कोशिश की है दिखाओ। – mkaatman

+0

टिप्पणी हटा दी गई है, कृपया ऊपर संपादित देखें देखें। – shabushabu

उत्तर

11

आप कोशिश कर सकते हैं

$data = array(); 
$keys = array(
     0 => 'should', 
     1 => 'be', 
     2 => 'int' 
); 

$value = 'yjd'; 



echo "<pre>"; 
setValue($data,$keys,$value); 
print_r($data); 

आउटपुट

Array 
(
    [should] => Array 
     (
      [be] => Array 
       (
        [int] => yjd 
       ) 

     ) 

) 

फ़ंक्शन प्रयुक्त

function setValue(&$data, $path, $value) { 
    $temp = &$data; 
    foreach ($path as $key) { 
     $temp = &$temp[$key]; 
    } 
    $temp = $value; 
    return $value ; 
} 
+1

धन्यवाद, एक आकर्षण की तरह काम करता है। अब जब मैं फंक्शन देखता हूं तो यह समझ में आता है। – shabushabu

+0

भयानक, बहुत कुछ! – fcaserio

+0

संख्यात्मक और सहयोगी, महान काम के लिए सार्वभौमिक! – Zydnar