0

我正在尝试在 PHP Web 服务的帖子中包含一个数组。它似乎不起作用,我相信它一定是某种格式问题,但我不知道如何格式化它。我有以下 iOS 帖子字符串:(我知道如何发布,这不是问题。)

NSString *post = [NSString stringWithFormat:@"&action=post_data&start_time=%f&runners=%@&racename=%@&num_splits=%d", timeInterval, runners /* NSMutableArray */, raceName, numberOfSplits];

"runners" 是 NSMutableArray 并且以这种方式传递它似乎无法正常工作。

我应该如何传递一个数组?我无法更改 PHP,并且该服务需要一个数组。我会将 JSON 对象传递给服务,但这是我无法控制的。

PHP 如下:

$runners = $_POST["runners"]; 
4

2 回答 2

2

我不清楚 PHP 想要在该参数中获得什么。

如果 PHP 期望在 中找到一个数组$runners,那么您需要发送一个包含此内容的 POST 查询(至少):

runners[]=element1&runners[]=element2&...

这将被 PHP 翻译成一个数组

{ 'element1', 'element2', ... }

如果您改为发送

runners[key1]=element1&runners[key2]=element2&...

那么您将在 PHP 中获得与您编写的结果相同的结果

$runners = array(
     'key1' => 'element1',
     'key2' => 'element2',
      ...
);

JSON 与它无关,除非 PHP 正在做一个json_decodeon$runners . (您对这种情况只字未提,所以我认为不是)。

于 2013-04-16T13:41:14.217 回答
0

伊塞米是对的。要将数组作为 post 变量传递,您需要按以下格式创建 url 字符串:

http://myserver.com/test.php?myArray[]=123&myArray[]=456

这是我实现它的方式:

NSArray *arrayWithIDs = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:123], [NSNumber numberWithInt:456], nil];
NSString *postVarArrayString = @"";
NSString *separator = @"?";
for (int i=0; i<[arrayWithIDs count]; i++) {
    if (i>0) {
        separator = @"&";
    }
    postVarArrayString = [NSString stringWithFormat:@"%@%@myArray[]=%d", postVarArrayString, separator, [[arrayWithIDs objectAtIndex:i] integerValue]];
}

// url
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:
                                   @"http://myserver.com/test.php"
                                   @"%@"
                                   , postVarArrayString]
             ];

NSLog(@"%@", [url absoluteString]);
于 2013-11-12T14:43:26.633 回答