PHP তে Array কে খুব সহজেই বিভিন্ন অর্ডারে Sort করা যায়। কিন্তু হঠাৎ সমস্যায় পড়ে গেলাম Alphanumeric Array Sorting এর ক্ষেত্রে। যেমন:
$arr = array(
"N1",
"N10",
"N12",
"N19",
"N2",
"N4",
"N5",
"N6",
"N7",
"N8",
"NW1",
"NW11",
"NW3",
"NW5"
);
এটাকে Sort করতে হবে এমন করে:
$arr = [
"N1",
"N2",
"N4",
"N5",
"N6",
"N7",
"N8",
"N10",
"N12",
"N19",
"NW1",
"NW3",
"NW5",
"NW11"
];
সেক্ষেত্রে natsort() function ব্যবহার করে খুব সহজেই কাজটা হয়ে গেল:
natsort($arr);
এ পর্যন্ত সব ঠিকঠাকই ছিল। কিন্তু সমস্যা দেখা দিল এটাকে json_encode() ফাংশন দিয়ে Json আউটপুট দিতে গিয়ে। আউটপুট Array না হয়ে Object হয়ে যাচ্ছে:
"arr": {
"0": "N1",
"4": "N2",
"5": "N4",
"6": "N5",
"7": "N6",
"8": "N7",
"9": "N8",
"1": "N10",
"2": "N12",
"3": "N19",
"10": "NW1",
"12": "NW3",
"13": "NW5",
"11": "NW11"
}
অনেকটা সময় ব্যয় করেও কোনো সমাধানে পৌঁছাতে পারছিলাম না। অবশেষে অনেক খোজখুজির পর Stackoverflow একটা পোস্ট দেখে ঘটনা বুঝতে পারলাম! ঘটনা হয়েছে এমন-
- natsort() ফাংশন দিয়ে Sort করার ফলে Array key (index) গুলো উল্টাপাল্টা হয়ে গেছে।
- Array key গুলোর অর্ডার নষ্ট হয়ে গেছে। দেখা যাচ্ছে 0 এর পর 4 এসে গেছে।
json_encode
তখই PHP Array কে Json Array তে রুপান্তর করবে যখন সেটা 0, 1, 2, 3… এমন Sequential Array হবে।
এই সমস্যার সমাধান হিসেবে এটাকে আগে re-index করতে হবে। তারপর json_encode
করতে হবে। যেমন:
$newArr = array_values($arr);
echo json_encode($newArr);
অবশেষে কাঙ্খিত ফলাফল:
"arr": [
"N1",
"N2",
"N4",
"N5",
"N6",
"N7",
"N8",
"N10",
"N12",
"N19",
"NW1",
"NW3",
"NW5",
"NW11"
]