您的位置:澳门新葡萄京娱乐网站 > 编程知识 > Objective-C中把数组中字典中的数据转变到U奥迪Q

Objective-C中把数组中字典中的数据转变到U奥迪Q

2019-12-22 01:32

2、如何把一个数组拼接成url传递。

parse_url

解析 URL,返回其组成部分

mixed parse_url ( string $url [, int $component = -1 ] )

本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。

本函数不是用来验证给定 URL 的合法性的,只是将其分解为下面列出的部分。不完整的 URL 也被接受,parse_url() 会尝试尽量正确地将其解析。

参数

url  要解析的 URL。无效字符将使用 _ 来替换。

component  指定 PHP_URL_SCHEME、 PHP_URL_HOST、 PHP_URL_PORT、 PHP_URL_USER、 PHP_URL_PASS、 PHP_URL_PATH、 PHP_URL_QUERY 或 PHP_URL_FRAGMENT 的其中一个来获取 URL 中指定的部分的 string。 (除了指定为 PHP_URL_PORT 后,将返回一个 integer 的值)。

返回值

对严重不合格的 URL,parse_url() 可能会返回 FALSE。

如果省略了 component 参数,将返回一个关联数组 array,在目前至少会有一个元素在该数组中。数组中可能的键有以下几种:

  • scheme - 如 http
  • host
  • port
  • user
  • pass
  • path
  • query - 在问号 ? 之后
  • fragment - 在散列符号 # 之后

如果指定了 component 参数, parse_url() 返回一个 string (或在指定为 PHP_URL_PORT 时返回一个 integer)而不是 array。如果 URL 中指定的组成部分不存在,将会返回 NULL。

实例

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
?> 

以上例程会输出:

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)
/path

    ​    ​    ​    ​2.对每个字典中的键值对遍历

2、如何把一个数组拼接成url传递。

parse_str

将字符串解析成多个变量

void parse_str ( string $str [, array &$arr ] )

如果 str 是 URL 传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域。

获取当前的 QUERY_STRING,你可以使用 $_SERVER['QUERY_STRING'] 变量。

参数

str  输入的字符串。

arr  如果设置了第二个变量 arr,变量将会以数组元素的形式存入到这个数组,作为替代。、

实例

<?php
$str = "first=value&arr[]=foo bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz
parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
?> 

 

前一段时间在读php-resque的源码,看到了在其中对这两个的方法的应用,感觉用的很好,用来解析redis链接的设置。

redis链接的格式是:redis://user:pass@host:port/db?option1=val1&option2=val2,是不是和URL一样,所以用以上两个方法很容易解析。

地址: 

代码如下:

    /**
     * Parse a DSN string, which can have one of the following formats:
     *
     * - host:port
     * - redis://user:pass@host:port/db?option1=val1&option2=val2
     * - tcp://user:pass@host:port/db?option1=val1&option2=val2
     *
     * Note: the 'user' part of the DSN is not used.
     *
     * @param string $dsn A DSN string
     * @return array An array of DSN compotnents, with 'false' values for any unknown components. e.g.
     *               [host, port, db, user, pass, options]
     */
    public static function parseDsn($dsn)
    {
        if ($dsn == '') {
            // Use a sensible default for an empty DNS string
            $dsn = 'redis://' . self::DEFAULT_HOST;
        }
        $parts = parse_url($dsn);
        // Check the URI scheme
        $validSchemes = array('redis', 'tcp');
        if (isset($parts['scheme']) && ! in_array($parts['scheme'], $validSchemes)) {
            throw new InvalidArgumentException("Invalid DSN. Supported schemes are " . implode(', ', $validSchemes));
        }
        // Allow simple 'hostname' format, which `parse_url` treats as a path, not host.
        if ( ! isset($parts['host']) && isset($parts['path'])) {
            $parts['host'] = $parts['path'];
            unset($parts['path']);
        }
        // Extract the port number as an integer
        $port = isset($parts['port']) ? intval($parts['port']) : self::DEFAULT_PORT;
        // Get the database from the 'path' part of the URI
        $database = false;
        if (isset($parts['path'])) {
            // Strip non-digit chars from path
            $database = intval(preg_replace('/[^0-9]/', '', $parts['path']));
        }
        // Extract any 'user' and 'pass' values
        $user = isset($parts['user']) ? $parts['user'] : false;
        $pass = isset($parts['pass']) ? $parts['pass'] : false;
        // Convert the query string into an associative array
        $options = array();
        if (isset($parts['query'])) {
            // Parse the query string into an array
            parse_str($parts['query'], $options);
        }
        return array(
            $parts['host'],
            $port,
            $database,
            $user,
            $pass,
            $options,
        );
    }

 

    ​    ​    ​    ​5.把拼接好的字符串URL加入到可变数组中然后返回存有URL的数组

这里介绍两种对url操作的方法:

PHP中有两个方法可以用来解析URL,分别是parse_url和parse_str。

    ​    ​    ​那么我们应如和把转换后的结再逆向成原来得数据格式呢?下面的博客中会提到相应的方法,谢谢朋友们的支持,不足之处还望批评指正。

1、拿到一个完整url后,如何解析该url得到里面的参数。

    ​    ​    ​最终转换结果为:

/** * 把数组拼接成url参数形式 */function getUrlQuery{ $tmp = array(); foreach ($array_query as $k => $param) { $tmp[] = $k . '=' . $param; } $params = implode; return $params;}

$url = 'http://www.test.com/link?param1=1&param2=2&param3=3';// 解析url,得到参数字符串$url = parse_url;// 字符串->数组$param_arr = $this->convertUrlQuery;// 数组->字符串$param_str = $this->getUrlQuery;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//从数组中取出字典,把每个然后拼接成url
for (int i = 0; i < arrayDic.count; i )
{
     
    NSLog(@"对数组中第%d个字典操作n:%@",i 1 ,arrayDic[i]);
     
    //URL
    NSMutableString *URL = [NSMutableString stringWithFormat:@"http://www.baidu.com"];
    //获取字典的所有keys
    NSArray * keys = [arrayDic[i] allKeys];
     
    //拼接字符串
    for (int j = 0; j < keys.count; j )
    {
        NSString *string;
        if (j == 0)
        {
            //拼接时加?
            string = [NSString stringWithFormat:@"?%@=%@", keys[j], arrayDic[i][keys[j]]];
             
        }
        else
        {
            //拼接时加&
            string = [NSString stringWithFormat:@"&%@=%@", keys[j], arrayDic[i][keys[j]]];
        }
        //拼接字符串
        [URL appendString:string];
         
    }
    NSLog(@"第%d个字典转换的URL:%@",i 1, URL);
    //加入数组
    [arrayURL addObject:URL];
     
}
/** * 解析url中参数信息,返回参数数组 */function convertUrlQuery{ $queryParts = explode; $params = array(); foreach ($queryParts as $param) { $item = explode; $params[$item[0]] = $item[1]; } return $params;}
1
2
3
4
5
//定义字典键
#define A @"a"
#define B @"b"
#define C @"c"
#define D @"d"
/** * 把数组拼接成url参数形式 */function getUrlQuery{ $tmp = array(); foreach ($array_query as $k => $param) { $tmp[] = $k . '=' . $param; } $params = implode; return $params;}

$url = 'http://www.test.com/link?param1=1&param2=2&param3=3';// 解析url,得到参数字符串$url = parse_url;// 字符串->数组$param_arr = $this->convertUrlQuery;// 数组->字符串$param_str = $this->getUrlQuery;

     ​    ​2.接下来我们要做的就是把上面可变数组中的字典中的数据转换为URL,转换的具体过程如下

PHP 中解析 url 并得到 url 参数

    ​    ​    ​    ​3.url中如果是第一个参数拼接时加上?

这里介绍两种对url操作的方法:

        在OC中我们如何把字典中的数据拼接成我们要请求的URL字符串呢?下面有一个需求:在一个数组中有多个字典,每个字典中的数据是请求一条URL中的参数,我们需要做的就是把每个字典转换为URL,在把每个URL放在数组中返回。下面的代码还是对数组,字符串和字典的具体的应用。

/** * 解析url中参数信息,返回参数数组 */function convertUrlQuery{ $queryParts = explode; $params = array(); foreach ($queryParts as $param) { $item = explode; $params[$item[0]] = $item[1]; } return $params;}

    ​    ​    ​添加测试数据

PHP 中解析 url 并得到 url 参数

1
2
3
4
5
6
2014-08-12 11:41:18.927 HelloOC[997:303] 转换完成:
(
    "http://www.baidu.com?a=10&b=20",
    "http://www.baidu.com?a=10&b=20&c=30",
    "http://www.baidu.com?a=10&c=30"
)

1、拿到一个完整url后,如何解析该url得到里面的参数。

        上面的需求对于熟练操作字典,数组,字符串的小伙伴们应该是小菜一碟吧,今天写出来就是想记录一些学习的点点滴滴,上面的时拼接URL, 下面的博客会URL拆分成字典,敬请期待吧!废话少说,还是代码走起。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//容纳字符串拼接后的字符串
NSMutableArray *arrayURL = [NSMutableArray new];
 
//存放可变字典的数组
NSMutableArray *arrayDic = [NSMutableArray new];
 
 
//生成测试数据
NSDictionary *dic1 = @{A : @10,
                       B : @20};
 
 
NSDictionary *dic2 = @{A : @10,
                       B : @20,
                       C : @30};
 
 
NSDictionary *dic3 = @{A : @10,
                       C : @30};
//把数组加入字典
[arrayDic addObject:dic1];
[arrayDic addObject:dic2];
[arrayDic addObject:dic3];

        可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对。而在OC我们要用字典(Dictionary)来存储,当然了Java用的是Map来存储键值对。下面我们将实现一个极为实用的小例子,网络请求有get和post方法,两种方法各有其优点。在表单提交时Post方法用的更多一些,URL传值则会用到Get方法。在用PHP编程的时候肯定会经常拼接url来传参或者请求,在IOS开发中会向服务器通过url请求一些数据,所以对url的拼接是少不了的,下面不是什么高深的技术,只是OC中集合类的一个小应用模块,欢迎批评指正,转载请注明出处。

            字典中的键我们一般是通过宏定义来初始化的,目的是便于维护,提高代码编写效率下面是对key的宏定义:

    ​    ​    ​    ​4.如果不是第一个参数拼接时加上&

    ​    ​    ​    ​1.对数组中的每个字典遍历

        1.生成测试数据

    ​    ​    ​代码说明:

本文由澳门新葡萄京娱乐网站发布于编程知识,转载请注明出处:Objective-C中把数组中字典中的数据转变到U奥迪Q

关键词: