3

嗨,我正在制作 mysql 数据库,用户可以在其中搜索其他用户,搜索时我希望它返回用户“id”和“name”,因为可能有同名的用户,所以我包括 id。这是我的 .php

编辑:因为我没有得到我想要的答案,我以为我说得不够清楚,现在我正在考虑以另一种方式尝试。假设ID将位于索引 0 中,NAME 位于索引 1 中,依此类推。请参阅我的 php 编辑评论。

   $result = mysql_query("SELECT `id`,`name` FROM `user` WHERE `name` LIKE '$search%'");


    mysql_close($con);

    $numrows = mysql_num_rows($result);

    if ($numrows!=0){
     while ($row = mysql_fetch_assoc ($result)){

  $id = $row['id'];

  $name = $row['name'];

            echo ("$id,$name///");

上面是我的第一次尝试,注意:编辑是一个例子,我在想的是让 id 和 name 分开,然后在 Xcode 中将它们再次分成两个不同的数组可以说,所有的 ID 都将通过有点跳跃在 ID 数组中每次“跳过名称”时超过一个索引,并且名称数组中的 NAMES 再次跳过 ids。

    // EDIT: echo "%id///";
    // EDIT: echo "%name///";


  }

 }else{
   echo "fail";   
 }

然后在 Xcode

     - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
   {
   if ([searchUsers.text length] != 0) {

   NSString *FindURL = [NSString stringWithFormat:@"http://localhost/search.php?search=%@",searchUsers.text];
    // to execute php code
    NSData  *URLData = [NSData dataWithContentsOfURL:[NSURL URLWithString:FindURL]];

    // to receive the returend value

    NSString *DataResult = [[NSString alloc] initWithData:URLData encoding:NSUTF8StringEncoding];


    NSArray *FriendsArray = [DataResult componentsSeparatedByString:@"///"];



    userlist = [[NSMutableArray alloc] initWithArray:FriendsArray];
    //[self searchDidSearch];
    [self.tableView reloadData];
   }

   }

结果就像 "1,somename" "2,somename" 等等。我想要的是拆分对象,以便NAME将在 tableviewcell 标题中,ID在 tableviewcell 子标题中,我想为每一行应用它。

有没有更简单的方法,或者我做错了什么?

4

2 回答 2

2

您可以尝试使 PHP 输出看起来更像NSDictionary Ex:

{      
  {
     "id" = 1;
     "name" = name1;
  },
   {
      "id" = 1;
      "name" = name2;
   },
}

然后您可以像这样访问“名称”的值(通过使用快速枚举创建名称数组):

    NSMutableArray *namesArray = [[NSMutableArray alloc]init];
      for(NSDictionary *dict in dataArray) //dataArray NSArray of data from PHP output
      { 
          [result addObject:[dict objectForKey:@"name"]];
      }

然后在 tableViewCell 字幕中显示名称,并使用以下代码(在 cellForRowAtIndexPath 方法中):

cell.textLabel.text = [NSString stringWithFormat:@"%@",[result objectAtIndex:indexpathRow]];

这不是最好的方法,但我认为将来使用这样的数组会更容易。快乐编码!:)

于 2013-04-17T23:11:53.010 回答
1

你没有做错任何事,我想你还有一步要走。遍历所有结果并像这样拆分字符串:

NSString * tempItem = [FriendsArray objectAtIndex:i]; //where i is each index, possibly in a loop
NSArray * splitObject = [tempItem componentsSeparatedByString:@","];

现在,splitObject 的第一个对象是 id,第二个对象是名称。你可以把它变成一个循环并得到你需要的东西。有许多不同的方法可以传递这些数据,我将把那个留给你。

于 2013-04-17T23:06:09.600 回答