मैं जवाब देकर बहुत भीड़ वाली पार्टी में शामिल हो रहा हूं, लेकिन एक महत्वपूर्ण विचार यह है कि कोई भी अतिरिक्त जवाब नहीं देता है। के मूल्य json_encode()
और serialize()
दोनों सरणी में तत्वों के क्रम पर निर्भर करते हैं!
यहां एरे को सॉर्ट न करने और छाँटने के परिणाम समान मूल्यों वाले दो ऐरे पर हैं, लेकिन एक अलग क्रम में जोड़ा गया है (पोस्ट के नीचे कोड) :
serialize()
1c4f1064ab79e4722f41ab5a8141b210
1ad0f2c7e690c8e3cd5c34f7c9b8573a
json_encode()
db7178ba34f9271bfca3a05c5dddf502
c9661c0852c2bd0e26ef7951b4ca9e6f
Sorted serialize()
1c4f1064ab79e4722f41ab5a8141b210
1c4f1064ab79e4722f41ab5a8141b210
Sorted json_encode()
db7178ba34f9271bfca3a05c5dddf502
db7178ba34f9271bfca3a05c5dddf502
इसलिए, दो तरीके जो मैं हैश करने की सलाह दूंगा एक सरणी होगी:
// You will need to write your own deep_ksort(), or see
// my example below
md5( serialize(deep_ksort($array)) );
md5( json_encode(deep_ksort($array)) );
की पसंद json_encode()
या serialize()
किया जाना चाहिए डेटा के प्रकार पर परीक्षण द्वारा निर्धारित किया है कि आप उपयोग कर रहे हैं । विशुद्ध रूप से पाठ्य और संख्यात्मक डेटा पर मेरे स्वयं के परीक्षण से, यदि कोड हजारों बार एक तंग लूप नहीं चला रहा है, तो अंतर बेंचमार्किंग के लायक भी नहीं है। मैं व्यक्तिगत रूपjson_encode()
से उस प्रकार के डेटा के लिएउपयोग करता हूं।
ऊपर दिए गए छँटाई परीक्षण को उत्पन्न करने के लिए यहाँ कोड का उपयोग किया गया है:
$a = array();
$a['aa'] = array( 'aaa'=>'AAA', 'bbb'=>'ooo', 'qqq'=>'fff',);
$a['bb'] = array( 'aaa'=>'BBBB', 'iii'=>'dd',);
$b = array();
$b['aa'] = array( 'aaa'=>'AAA', 'qqq'=>'fff', 'bbb'=>'ooo',);
$b['bb'] = array( 'iii'=>'dd', 'aaa'=>'BBBB',);
echo " serialize()\n";
echo md5(serialize($a))."\n";
echo md5(serialize($b))."\n";
echo "\n json_encode()\n";
echo md5(json_encode($a))."\n";
echo md5(json_encode($b))."\n";
$a = deep_ksort($a);
$b = deep_ksort($b);
echo "\n Sorted serialize()\n";
echo md5(serialize($a))."\n";
echo md5(serialize($b))."\n";
echo "\n Sorted json_encode()\n";
echo md5(json_encode($a))."\n";
echo md5(json_encode($b))."\n";
मेरा त्वरित डीप_स्कॉर्ट () कार्यान्वयन, इस मामले में फिट बैठता है, लेकिन अपनी परियोजनाओं पर उपयोग करने से पहले इसे जांचें:
/*
* Sort an array by keys, and additionall sort its array values by keys
*
* Does not try to sort an object, but does iterate its properties to
* sort arrays in properties
*/
function deep_ksort($input)
{
if ( !is_object($input) && !is_array($input) ) {
return $input;
}
foreach ( $input as $k=>$v ) {
if ( is_object($v) || is_array($v) ) {
$input[$k] = deep_ksort($v);
}
}
if ( is_array($input) ) {
ksort($input);
}
// Do not sort objects
return $input;
}