আমি উত্তর দিয়ে খুব জনাকীর্ণ দলে যোগ দিচ্ছি, তবে একটি গুরুত্বপূর্ণ বিবেচনা রয়েছে যে বিদ্যমান কোনও উত্তরই সম্বোধন করে না। মান 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;
}