您现在的位置是: 首页> PHP>PHP四种重要的数据类型:字符串、数组、json、对象 所属分类:PHP
PHP四种重要的数据类型:字符串、数组、json、对象
初柒先生
2019-09-18 21:57
【php】
【json】
【数组】
349人已围观
简介php中字符串、数组、json、对象这四种数据类型,在开发过程中使用的最高频率。它们在一定条件下,可以相互转化,下面将详细说明这四种数据类型。
php中字符串、数组、json、对象这四种数据类型,在开发过程中使用的最高频率。它们在一定条件下,可以相互转化,下面将详细说明这四种数据类型。
php数据输出方式有:echo、print、print_r、printf、sprintf、var_dump
1、字符串
在php中字符串有三种界定符:单引号、双引号、三个小于号(<<<),单引号因为不解析处理效率最快。
单引号:对于单引号中包含的变量,是不作解析的,只是照原样输出。(处理效率高于双引号)
双引号:对于双引号中包含的变量,PHP会解析。
三个小于号(<<<):主要用于一些大的文本内容,如果中间包含已定义的变量,PHP也会解析。格式是以<<<开头并加上任意字母组成头部(例如:<<<EOF),因为是用EOF组成的头部,所以尾部也要用EOF结束,需要注意是结尾那一行EOF的前面不能有任何空格、缩进、字符等。(适合写代码在变量里面)
//单引号:不解析引号里的变量
$book = 'Computer';
$str1 = 'This is $book';
echo $str1;//输出为:This is $book
//双引号:解析引号里的变量
$str2 = "This is $book";
echo $str2;//输出为:This is Computer
//三个小于号(<<<):原样输出
$str3 = <<<EOF
<div>专业的网站建设$book</div>
EOF;
echo $str3;//输出为:<div>专业的网站建设Computer</div>
(1)字符串和数组相互转换
字符串转为数组时,字符串需要按一定的格式填写,使用下面这个函数,即字符串按指定分符分割成数组。
方法:explode(separator,string,limit)
separator:必需,规定在哪里分割字符串。
string:必需,要分割的字符串。
limit:可选,规定所返回的数组元素的最大数目。
数组转为字符串,数组数据按指定分割符作为间隔符转为字符串,使用下面这个函数。
方法:implode(separator,array)
separator:可选,规定数组数据间隔符,默认空字符。
array:必需,要结合为字符串的数组。
字符串数组互转示例:
$arr = array("zhangsan","lisi","wangwu");
$str = implode(",",$arr);
echo $str."<br>";
$str = "zhangsan,lisi,wangwu";
$arr = explode(",",$str);
print_r($arr);
(2)字符串常用函数:
ucfirst()函数:把字符串中的首字符转换为大写;
lcfirst()函数:把字符串中的首字符转换为小写;
strtolower()函数:把字符串转换为小写;
strtoupper()函数:把字符串转换为大写;
ucwords()函数:把字符串中每个单词的首字符转换为大写。
2、数组
php中数组输出数据我知道的有三种方式:var_export()函数、var_dump()函数、print_r()函数。
重点介绍var_export()函数:该函数返回的是关于传递给该函数变量的结构信息,输出结果与var_dump()类似,不同的是其返回的数据是合法的PHP代码。也就是说,var_export返回的数据,可以直接当作php代码赋值给一个变量。 而这个变量就会取得和被var_export输出的数据一样的数据类型。
例如:
$city = ['shandong'=>'jinan','henan'=>'zhengzhou',];
var_export($city);
输出结果(可以直接变量赋值的数据):
array ( 'shandong' => 'jinan', 'henan' => 'zhengzhou', )
3、json
json数据是JavaScript对象表示法(JavaScript Object Notation),用于存储和交换文本信息的语法。以键值对作为基本数据格式,用方括号保存数组数据,用大括号保存对象数据。如下:
{
"employees": [
{"firstName":"Bill","lastName":"Gates"},
{"firstName":"George","lastName":"Bush"},
{"firstName":"Thomas","lastName":"Carter"}
]
}
(1)json转数组和对象
在PHP中Json数据的表现形式是以字符串(按json数据格式)表示,这种字符串格式可以与数组互转,也可以和对象相互转换。
json_encode() :用于对数组或者对象数据进行JSON编码,执行成功返回JSON字符串数据,否则返回FALSE。
json_decode():用于对JSON格式的字符串进行解码,并转为数组或者对象。
//数组=>json
$arr = array('a' => 1, 'b' => 2, 'c' => 3);
echo json_encode($arr);//结果:{"a":1,"b":2,"c":3}
//对象=>json
$obj = new People;
$obj->name = "zhangsan";
$obj->age = 23;
echo json_encode($obj);//结果:{"name":"zhangsan","age":23}
class People {
public $name;
public $age;
}
$json = '{"name":"zhangsan","age":23}';
//json=>对象
var_dump(json_decode($json));
//结果:object(stdClass)#1 (2) { ["name"]=> string(8) "zhangsan" ["age"]=> int(23) }
//json=>数组
var_dump(json_decode($json, true));
//结果:array(2) { ["name"]=> string(8) "zhangsan" ["age"]=> int(23) }
重要问题:在不同php版本中,对"json字符串"解析存在以下问题
//使用双引号定义的json字符串转为数组,输出值为null
$json = "{'name':'tom','age':'20'}";
var_dump(json_decode($json,true));
//使用单引号定义的json字符串转为数组,能正常输出
$json = '{"name":"tom","age":"20"}';
var_dump(json_decode($json,true));
4、对象
php中对象和数组是没有太大差别,只是他们在表示方式上有所不同。对象存在的数据比数据多出对象的方法,对象转为数组也就是将对象的变成转成关联数组(忽视对象的方法),而数组转成的对象就没有了对象方法(数组数据没有保存方法)。
(1)使用数据类型对数据进行强制转换,这种方式针对的是一维数据
$objTemp = (object)array();
$objTemp->a = 1;
$objTemp->b = 2;
$objTemp->c = 3;
$arrTemp = (array)$objTemp;
print_r($objTemp);//结果:stdClass Object ( [a] => 1 [b] => 2 [c] => 3 )
print_r($arrTemp);//结果:Array ( [a] => 1 [b] => 2 [c] => 3 )
(2)多维数组与对象间的转换处理:对象转数组
__FUNCTION__:返回当前函数的名称
get_object_vars:返回由对象属性组成的关联数组 ,也就是将对象转为数组
array_map(): 将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组
/**
* 将对象转换为多维数组
**/
function objectToArray($d) {
if (is_object($d)) {
$d = get_object_vars($d);
}
if (is_array($d)) {
return array_map(__FUNCTION__, $d); //递归
}
else {
return $d;
}
}
(3)多维数组与对象间的转换处理:数组转对象
/**
* 将多维数组转换为对象
**/
function arrayToObject($d) {
if (is_array($d)) {
//数组强转对象
return (object) array_map(__FUNCTION__, $d);
}
else {
return $d;
}
}
示例:
$init = new stdClass;
$init->foo = "Test data";
$init->bar = new stdClass;
$init->bar->baaz = "Testing";
$init->bar->fooz = new stdClass;
$init->bar->fooz->baz = "Testing again";
$init->foox = "Just test";
//转换出来
$array = objectToArray($init);
$object = arrayToObject($array);
//输出结果
print_r($init);
print_r($array);
print_r($object);
很赞哦! (9)
相关文章
文章评论
猜你喜欢
