2013-06-19 8 views
5

सर्कुलर संदर्भों के लिए आप चर का परीक्षण कैसे करते हैं?परीक्षण यदि चर वैरिएबल संदर्भ

मैं PHP के var_export() फ़ंक्शन का उपयोग कर रहा हूं, जिसमें वापसी स्ट्रिंग तर्क true पर सेट है।

मुझे पता चला कि Warning: var_export does not handle circular references और यह सोच रहा था कि किसी को एक परीक्षण के तरीके के बारे में पता था या नहीं, तो किसी चर में एक परिपत्र संदर्भ होता है ताकि मैं var_export का उपयोग करने से पहले इसका उपयोग कर सकूं।

मुझे पता है कि var_export PHP eval-able टेक्स्ट आउटपुट करता है जिसका उपयोग सरणी को फिर से बनाने के लिए किया जा सकता है और भले ही मैं इसका उपयोग नहीं कर रहा हूं, फिर भी मैं इस फ़ंक्शन का उपयोग तब उपलब्ध करना चाहता हूं जब आउटपुट प्रारूप मेरी आवश्यकताओं को पूरा करता है । var_dump एक विकल्प नहीं है क्योंकि यह इसके बजाय एक स्ट्रिंग को वापस करने के लिए तर्क स्वीकार नहीं करता है। मुझे पता है कि मैं var_dump के आउटपुट को बफर कर सकता हूं जो सर्कुलर संदर्भों को गहन रूप से संभालता है और बफर सामग्री को एक चर में सहेजता है लेकिन मैं वास्तव में जानना चाहता हूं कि किसी को एक चर में ऐसे संदर्भों का परीक्षण करने का तरीका पता है या नहीं।

$r = array(); 
$r[] = &$r; 
var_export($r, true); 

उत्तर

0

यह करना होगा:

आप एक त्वरित वृत्तीय संदर्भ बनाना चाहते हैं इस करते हैं?

function isRecursive($array) { 
    foreach($array as $v) { 
     if($v === $array) { 
      return true; 
     } 
    } 
    return false; 
} 
+0

के साथ आते हैं यह मैं – BIOS

+0

के लिए एक घातक त्रुटि देता है क्या है घातक त्रुटि? –

+0

'घोंसला स्तर बहुत गहरा' – BIOS

3

Hacky लेकिन सच परिपत्र उदाहरण आप दे दी है के आधार पर रिटर्न:

<?php 
// create the circular reference 
$r = array(); 
$r[] = &$r; 

function isRecursive($array){ 
    $dump = print_r($array, true); 
    if(strpos($dump, '*RECURSION*') !== false) 
     return true; 
    else 
     return false; 
} 

echo isRecursive($r); // returns 1 

इच्छुक देखने के लिए और क्या लोग :)

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