今日学习笔记

1,实例化对象时候,括号主要是为了传入参数。
如果构造函数有参数就必须要括号,如果没有参数,加不加括号效果都相同。

<?php 

$arr = [];
$arr[0]=‘a‘;
$arr[1]=‘b‘;

$jsonstr = json_encode($arr);
echo $jsonstr;
echo "<br>";
echo json_encode($arr,JSON_FORCE_OBJECT);

/**
*
*/
class Ceshi
{
	public $name = ‘chang‘;
	public $age;
	function __construct($setname){
		$this->name =$setname ;
	}
	function say()
	{
		echo $this->name.‘向你问好‘;
	}
}

$person = new Ceshi(‘changliang‘);

$person->say();

echo json_encode($person);
 ?>

  2,json_encode 不加option参数,会自动根据给定的类型进行转换。比如数组他就转换为数组,对象就转换为对象类型的json。

3,

class Ceshi {public $name = ‘chang‘;public $age;function __construct($setname){$this->name =$setname ;}function say(){echo $this->name.‘向你问好‘;}}
$person = new Ceshi(‘changliang‘);
$person->say();

4,

php json 格式控制

关于 json 这个问题,陆陆续续有新手朋友找我问,比如为什么我输出的是 {"1":"item1","2":"item2","3":"item3"} 而不是 ["item1","item2","item3"]

php数组 与 js数组

我这里用 php 5.4 以上语法表示。

php 里有关联数组和索引数组,例如:

文本

<?php
// 索引数组
$arr = [‘item1‘, ‘item2‘, ‘item3‘];

// 关联数组
$arr = [
  ‘name‘ => ‘张三‘,
  ‘age‘ => ‘22‘,
];

而 js 里只有一种数组,那就是索引数组,也许你会说可以用 K/V 键值对形式模拟关联数组啊。
K/V 键值对看起来像,但他没有任何数组特性,这里就不详细说明了。

而上面的 php 数组 json_encode 后得到的 json 格式分别是 ["item1","item2","item3"] 和 {"name":"\u5f20\u4e09","age":"22"}。这里的中文被转为 Unicode 了,如果你非要显示中文,php 5.4 之后支持 JSON_UNESCAPED_UNICODE 参数,json_encode($arr, JSON_UNESCAPED_UNICODE) 即可得到 {"name":"张三","age":"22"},不过非常不推荐这样写。

这里分别得到的是 js 下的 数组 和 对象 格式的 json 字符串,那为什么会生成这两种类型,或者说,什么情况会生成对象格式,什么情况会生成数组格式呢。

php 数组 输出格式控制

大致几种情况我都列出来了,直接看代码。

文本

<?php

$arr = [ // 不是 0 开始,会输出对象
  1 => ‘item1‘,
  2 => ‘item2‘,
  3 => ‘item3‘,
];
echo "输出对象: ", json_encode($arr), "\n";
// 输出对象: {"1":"item1","2":"item2","3":"item3"}

$arr = [ // 连续索引,输出数组
  0 => ‘item1‘,
  1 => ‘item2‘,
  2 => ‘item3‘,
];
echo "输出数组: ", json_encode($arr), "\n";
// 输出数组: ["item1","item2","item3"]

$arr = [ // 连续索引,输出数组
  ‘item1‘,
  ‘item2‘,
  ‘item3‘,
];
echo "输出数组: ", json_encode($arr), "\n";
// 输出数组: ["item1","item2","item3"]

$arr = [ // 索引不连续,输出对象
  0 => ‘item1‘,
  1 => ‘item2‘,
  2 => ‘item3‘,
  5 => ‘item5‘,
];
echo "输出对象: ", json_encode($arr), "\n";
// 输出对象: {"0":"item1","1":"item2","2":"item3","5":"item5"}

$arr = [ // 包含关联索引,一定输出对象
  0 => ‘item1‘,
  1 => ‘item2‘,
  2 => ‘item3‘,
  ‘other‘ => ‘其他字段‘
];
echo "输出对象: ", json_encode($arr), "\n";
// 输出对象: {"0":"item1","1":"item2","2":"item3","other":"\u5176\u4ed6\u5b57\u6bb5"}

// 关联数组 + 索引数组 实例
$arr = [ // 关联数组
  ‘other‘ => ‘其他字段‘,
  ‘count‘ => 3, // 数组个数
  ‘list‘ => [ // 索引数组
    ‘item1‘,
    ‘item2‘,
    ‘item3‘,
  ],
];
echo "对象+数组: ", json_encode($arr), "\n";
// 对象+数组: {"other":"\u5176\u4ed6\u5b57\u6bb5","count":3,"list":["item1","item2","item3"]}

其实第一种就是很多新手朋友经常遇到的问题。
因为数据库读出来后他们喜欢把 id 当索引用,而数据库的 id 不是从 0 开始的,看下这个例子。

文本

$arr = $User->where($where)->find(); // 读取数据

$list = [];
foreach($arr as $key => $val) { // 遍历数组
  $list[$key] = [
    ‘name‘ => $val[‘name‘],
    ‘age‘ => $val[‘age‘],
  ];
}

$list[‘count‘] = count($arr); // 其他属性

echo json_encode($list); // 输出 json
// {"1":{"name":"zhangsan","age":22},"2":{"name":"lisi","age":25},"count":2}

而最后一种是比较常用的写法,自定义字段和数组一起用,来修改下刚才例子。

文本

$arr = $User->where($where)->find(); // 读取数据

$list = [];
foreach($arr as $key => $val) { // 遍历数组
  $list[‘list‘][] = [ // 修改这里
    ‘name‘ => $val[‘name‘],
    ‘age‘ => $val[‘age‘],
  ];
}

$list[‘count‘] = count($arr); // 其他属性

echo json_encode($list); // 输出 json
// {"list":[{"name":"zhangsan","age":22},{"name":"lisi","age":25}],"count":2}

OK,希望对刚入门的 phper 有所帮助。

时间: 2024-10-27 10:22:55

今日学习笔记的相关文章

今日课堂学习笔记03

今日学习了很多内容.有iframe框架和表单. 现在进入主题: iframe 内嵌框架 iframe一般用来包含别的页面,例如我们可以在我们自己的网站页面加载别人网站的内容. 标签属性常用的有 width.height.scrolling.frameboder scrolling的值是yes/no/auto与css里的overflow不一样,容易混淆. 滚动条的出现是嵌入网页大小与框架的大小对比为准的,就是当网页大于框架大小时在允许的情况下,它就会出现滚动条. frameboder是设置窗口的边

【JAVAWEB学习笔记】09

今天晨读单词: order:订单constraint:(强制)约束foreign key:外键references:指向orderitem:订单项join:加入resourceBundle:资源捆绑classLoader:类加载器properties:属性inputstream:输入流 今日学习目标: 1.能够描述表与表的关系 2.能独立编写一对多的表关系SQL语句 3.能独立编写多对多的表关系SQL语句 4.能使用SQL进行多表查询 5.能使用JDBC完成单表增删改查操作 值得注意的是:除了d

【JAVAEE学习笔记】hibernate01:简介、搭建、配置文件详解、API详解和CRM练习:保存客户

今日学习:hibernate是什么 一.hibernate是什么 框架是什么: 1.框架是用来提高开发效率的 2.封装了好了一些功能.我们需要使用这些功能时,调用即可.不需要再手动实现. 3.所以框架可以理解成是一个半成品的项目.只要懂得如何驾驭这些功能即可. hibernate框架是什么: hibernate的好处: 操作数据库的时候,可以以面向对象的方式来完成.不需要书写SQL语句 hibernate是一款orm框架: orm:object relationg mapping. 对象关系映射

&lt;ASP.NET4 从入门到精通&gt;学习笔记1

很久没有写东西了,今日有时间,开始整理一下关于ASP.NET 4的学习笔记,提醒自己,也欢迎评论. 概述一共分为6个大的部分,后续文章,将根据每个部分进行整理,本读书笔记只是整理关键点,对于啰嗦的内容一概省略. 第一部分,基础知识部分 我认为这个部分是这部书作为入门部分讲解比较深入和清楚地部分,对于ASP.NET,他的本质是web开发,不管是web form还是MVC,那么在进行web开发之前,首先就需要了解,为什么会出现ASP.NET,其实,在早期的时候,应该说是HTML和HTTP的天下,在计

python 学习笔记 12 -- 写一个脚本获取城市天气信息

最近在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么能够显示后最重要的就是显示什么的问题了.最容易想到的就是显示时间啊,CPU利用率啊,IP地址之类的.那么我觉得呢,如果能够显示当前时间.温度也是甚好的,作为一个桌面小时钟还是很精致的. 1. 目前有哪些工具 目前比较好用的应该是 weather-util, 之前我获取天气信息一般都是通过它. 使用起来也很简单: (1) Debian/Ubuntu 用户使用 sudo apt-get install weather-util 安装

【JAVAWEB学习笔记】09_MySQL多表&amp;JDBC(包含MySQL数据库思维导图)

今天晨读单词: order:订单constraint:(强制)约束foreign key:外键references:指向orderitem:订单项join:加入resourceBundle:资源捆绑classLoader:类加载器properties:属性inputstream:输入流 今日学习目标: 1.能够描述表与表的关系 2.能独立编写一对多的表关系SQL语句 3.能独立编写多对多的表关系SQL语句 4.能使用SQL进行多表查询 5.能使用JDBC完成单表增删改查操作 通过MySQL思维导

Backbone学习笔记

MVC 爱创课堂今日分享-Backbone学习笔记 M表示模型V表示视图C表示控制器MVC最早出现在smalltalk语言中,MVC分别表示模型,视图,控制器,模型通常指的是数据,视图通常是它能看到的页面,控制器通常表示一些交互等等,MVC根据前后端的划分,又有不同的含义对于后端来说M(Model)模型,通常指的是底层的数据,例如对数据库操作数据的封装等V(View)视图,向前端输出的视图等等,包括渲染视图,创建视图等等C(Controller)控制器,指的是对模型以及视图的操作,例如获取请求,

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu