2012-01-09 15 views
10

मैं कुछ प्रश्नों के कुछ एसक्यूएल कैशिंग कर रहा हूं। मैं CakePHP का उपयोग कर रहा है ताकि क्वेरी की स्थिति इस प्रकार एक सरणी में हैं:एक बहुआयामी सरणी का चेकसम प्राप्त करने का सबसे साफ तरीका क्या है?

array (
    0 => 
    array (
    0 => 'Tutorial.id IN (SELECT tutorial_id FROM classifications WHERE classifications.product_id = 1) ', 
), 
    1 => 
    array (
    'Tutorial.status_id ' => 
    array (
     0 => 4, 
     1 => 7, 
    ), 
), 
    'OR' => 
    array (
    'Tutorial.user_id' => '40', 
), 
); 

मैं ज्यादातर product_id तलाश कर रहा हूँ, लेकिन कुछ अन्य संभावित स्थितियां हैं, तो मैं चेकसम को सरणी कम करने के लिए और चाहते थे इसे कैश फ़ाइल के नाम पर संलग्न करें। इस तरह से मैं ट्यूटोरियल_by_classification-413a86af या कुछ होगा, और मुझे सरणी के माध्यम से चुनना नहीं होगा।

मैंने php.net in the comments पर mutli-d arrays को implode करने के लिए फ़ंक्शन देखा है, लेकिन मुझे आश्चर्य है कि मेरे लक्ष्य को प्राप्त करने का एक आसान तरीका है या नहीं।

उत्तर

15

कैसे serialize और md5? serialize आपके सरणी का स्ट्रिंग प्रस्तुति बनाता है; md5 इसका एक हैश बनाता है।

उदाहरण:

$query = array (
    0 => 
    array (
    0 => 'Tutorial.id IN (SELECT tutorial_id FROM classifications WHERE classifications.product_id = 1) ', 
), 
    1 => 
    array (
    'Tutorial.status_id ' => 
    array (
     0 => 4, 
     1 => 7, 
    ), 
), 
    'OR' => 
    array (
    'Tutorial.user_id' => '40', 
), 
); 

$query_string = serialize($query); 
$hash = md5($query_string); 

echo $query_string, "\n\n\n", $hash, "\n"; 

/* 
a:3:{i:0;a:1:{i:0;s:96:"Tutorial.id IN (SELECT tutorial_id FROM classifications WHERE classifications.product_id = 1) ";}i:1;a:1:{s:19:"Tutorial.status_id ";a:2:{i:0;i:4;i:1;i:7;}}s:2:"OR";a:1:{s:16:"Tutorial.user_id";s:2:"40";}} 


a5cb59f0ee259961e426c7ce9b7b8f32 
*/ 
+0

धन्यवाद, बस मुझे जो चाहिए! मैं हैश के लिए crc32 का उपयोग कर समाप्त हुआ क्योंकि यह फाइल नाम छोटे http://codepad.org/LhTotSth रखता है। –

10

मैं सिर्फ यह करना होगा:

$checksum = md5(json_encode($array)); 

json_encode थोड़ा तेज serialize से है, लेकिन आप serialize के कुछ लाभ खो देते हैं। हालांकि, आप जो कर रहे हैं उसके लिए, इससे कोई फर्क नहीं पड़ता।

+0

"json_encode serialize से थोड़ा तेज है"। मेरे मानक के मुताबिक, यह नहीं है - यह लगभग 30% धीमी है। (लेकिन वे दोनों बहुत तेज़ हैं, इसलिए शायद कोई चिंता नहीं है।) – lonesomeday

+0

इस के अनुसार: https://bugs.php.net/bug.php?id=51267 मुझे लगता है कि यह इस बात पर निर्भर करता है कि आपका क्या है या नहीं सरणी घोंसला है। –

+0

या तो मेरी सरणी इसे दिखाने के लिए बहुत आसान थी, या बग तय किया गया है ... – lonesomeday

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

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