2013-05-08 8 views
9

मैं में {{key}} आइटम को पास किए गए सरणी के मानों के साथ बदलने की कोशिश कर रहा हूं। लेकिन जब मैंने जोड़ने का प्रयास किया तो यह देखने के लिए कि मुझे Undefined variable: kvPairs त्रुटि मिली है। मैं preg_replace_callback के भीतर अपने चर आकार को कैसे एक्सेस कर सकता हूं?मैं preg_replace_callback के अंदर एक चर का उपयोग कैसे करूं?

public function replaceValues($kvPairs, $text) { 
    $text = preg_replace_callback(
     '/(\{{)(.*?)(\}})/', 
     function ($match) { 
      $attr = trim($match[2]); 
      print_r($kvPairs[strtolower($attr)]); 
      if (isset($kvPairs[strtolower($attr)])) { 
       return "<span class='attr'>" . $kvPairs[strtolower($attr)] . "</span>"; 
      } else { 
       return "<span class='attrUnknown'>" . $attr . "</span>"; 
      } 
     }, 
     $text 
    ); 
    return $text; 
} 

अद्यतन:

मैं global गुंजाइश बात की कोशिश की है, लेकिन यह या तो काम नहीं करता। मैंने 2 प्रिंट स्टेटमेंट्स को जोड़ा है, यह देखने के लिए कि क्या कर रहा है, एक अंदर और preg_replace_callback के बाहर एक।

public function replaceValues($kvPairs, $text) { 
    $attrTest = 'date'; 
    print_r("--" . strtolower($attrTest) . "--" . $kvPairs[strtolower($attrTest)] . "--\n"); 
    $text = preg_replace_callback(
     '/(\{{)(.*?)(\}})/', 
     function ($match) { 
      global $kvPairs; 
      $attr = trim($match[2]); 
      print_r("==" . strtolower($attr) . "==" . $kvPairs[strtolower($attr)] . "==\n"); 
      if (isset($kvPairs[strtolower($attr)])) { 
       return "<span class='attr'>" . $kvPairs[strtolower($attr)] . "</span>"; 
      } else { 
       return "<span class='attrUnknown'>" . $attr . "</span>"; 
      } 
     }, 
     $text 
    ); 
    return $text; 
} 

उत्पादन मैं मिलता है:

--date--1977-05-20-- 
==date==== 

उत्तर

35

अपने कॉलबैक समारोह के रूप में के रूप में यह घोषणा करते हैं एक बंद है , आप use

function ($match) use ($kvPairs) { 
    ... 
} 
01 के माध्यम से अतिरिक्त तर्क पारित कर सकते हैं

वैश्विक अंतरिक्ष प्रदूषण से बेहतर

+0

काम नहीं करता है, मैं अगले मैच के लिए $ केवीपीयरों में हेरफेर करना चाहता हूं, क्या यह संभव है या मुझे इसके लिए वैश्विक चर की आवश्यकता है? – Wikunia

+4

यदि आपको कॉलबैक के भीतर '$ kvPairs 'में हेरफेर करने की आवश्यकता है तो आप इसे ___by संदर्भ___:' फ़ंक्शन ($ मिलान) उपयोग (& $ kvPairs) { ... }' –

-1

$kvPairs, अपने कॉल वापस समारोह में क्षेत्र से बाहर है एक वैश्विक

function($match) { 
    global $kvPairs; 
    ... 
} 
+0

यह – Justin808

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