অন্যান্য উত্তরগুলি দুর্দান্ত কাজ করে যদি মানগুলি স্ট্রিং হয় তবে মানগুলি অভিধান বা অ্যারে হয় তবে এই কোডটি এটি পরিচালনা করবে।
এটি গুরুত্বপূর্ণ যে এখানে ক্যারি স্ট্রিংয়ের মাধ্যমে অ্যারে / অভিধান পাস করার কোনও মানক উপায় নেই তবে পিএইচপি এই আউটপুটটিকে ঠিকঠাকভাবে পরিচালনা করে
-(NSString *)serializeParams:(NSDictionary *)params {
NSMutableArray* pairs = [NSMutableArray array];
for (NSString* key in [params keyEnumerator]) {
id value = [params objectForKey:key];
if ([value isKindOfClass:[NSDictionary class]]) {
for (NSString *subKey in value) {
NSString* escaped_value = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)[value objectForKey:subKey],
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
[pairs addObject:[NSString stringWithFormat:@"%@[%@]=%@", key, subKey, escaped_value]];
}
} else if ([value isKindOfClass:[NSArray class]]) {
for (NSString *subValue in value) {
NSString* escaped_value = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)subValue,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
[pairs addObject:[NSString stringWithFormat:@"%@[]=%@", key, escaped_value]];
}
} else {
NSString* escaped_value = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)[params objectForKey:key],
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
[pairs addObject:[NSString stringWithFormat:@"%@=%@", key, escaped_value]];
[escaped_value release];
}
}
return [pairs componentsJoinedByString:@"&"];
}
উদাহরণ
[foo] => bar
[translations] =>
{
[one] => uno
[two] => dos
[three] => tres
}
foo = বার এবং অনুবাদসমূহ [এক] = আনো ও অনুবাদ [দুই] = ডস এবং অনুবাদ [তিন] = ট্রেস
[foo] => bar
[translations] =>
{
uno
dos
tres
}
foo = বার ও অনুবাদসমূহ [] = আনো ও অনুবাদসমূহ [] = ডস এবং অনুবাদসমূহ [] = ট্রেস