数组键值对与字符串键值对的相互转换

<?php
declare(strict_types=1);
ini_set('display_errors', 'On');
error_reporting(-1);


$arr = [
    'name' => '码农人生',
    'url' => 'https://mn.co/',
    't&f' => 'true',
];
echo var_export($arr, true) . PHP_EOL . PHP_EOL;
// array (
//     'name' => '码农人生',
//     'url' => 'https://mn.co/',
//     't&f' => 'true',
// )


//========== 数组转“key1=value1&key2=value2&key3=value3”格式字符串 ==========//
$query = http_build_query($arr); // 重要提醒:http_build_query()函数会自动对键和值都进行urlencode处理
echo $query . PHP_EOL . PHP_EOL; // name=%E7%A0%81%E5%86%9C%E4%BA%BA%E7%94%9F&url=https%3A%2F%2Fmn.co%2F&t%26f=true
$str = urldecode($query);
echo $str . PHP_EOL . PHP_EOL; // name=码农人生&url=https://mn.co/&t&f=true


//========== “key1=value1&key2=value2&key3=value3”格式字符串转数组 ==========//
$result = null;
parse_str($str, $result);
echo var_export($result, true);
// array (
//     'name' => '码农人生',
//     'url' => 'https://mn.co/',
//     't' => '',
//     'f' => 'true',
// )


//========== 总结 ==========//
// 1、http_build_query()函数不仅会对数组键值进行urlencode处理,也会对数组键名进行urlencode处理。
// 2、在生成数字签名时经常需要构造“key1=value1&key2=value2&key3=value3”格式的字符串,使用http_build_query()函数可以很方便地帮我们
//    构造出这种字符串,但是需要注意的是http_build_query()函数会对value进行urlencode处理,而生成数字签名一般要求使用原样value无需编
//    码,所以得到query字符串后需要进行urldecode处理。

Copyright © 2024 码农人生. All Rights Reserved