从0开始学习php

PHP 0-1背包问题

0-1背包问题背景

我们有n种物品,物品j的重量为wj,价格为pj。我们假定所有物品的重量和价格都是非负的。背包所能承受的最大重量为W。如果限定每种物品只能选择0个或1个,则问题称为0-1背包问题。

背包问题

递归算法

假如背包的容量是C=6,物品的体积为w,对应的物品的价值为v。我们从最后一个物品开始,如果它的体积比背包剩余容量小,它面临着两种选择:1,放进背包;2,不放进背包。

如果它的体积比背包剩余容量大,那么就不能放进背包,n往前走。如上图所示,每个物品都面临着这种选择,直到n<0,即没物品可放。

下面为背包问题的递归算法。

递归算法的问题是,有好多的重复计算,时间复杂度为2的n次方,n为物品数量。

动态规划算法

动态规划跟递归非常相似,不同的地方在于使用一个数组来记录已经计算过的,避免重复计算。

在上面代码中假如4行后就变为动态规划了,时间复杂度也变为O(n*c)

展开
收起

PHP 庆祝 25 周年,朝着 8.0 版本继续努力

2020 年 6 月 8 日,PHP 迎来了自己的 25 周岁生日。JetBrains 在博客中梳理了该语言自 1995 年诞生以来的种种历程,这种语言最初是用 C 语言编写的一组通用网关接口(Common Gateway Interfac,CGI)二进制文件,第一个 PHP 脚本套件被称为“个人主页工具”或“PHP 工具”。

1998 年发布的 PHP 的第三次迭代是 Andi Gutman 和 Zeev Suraski 重写了 Lerdorf 编写的现有解释器的结果。JetBrains 解释称,此版本的 PHP 3.0 很像现在的 PHP 的第一个版本。 语言的名称改为递归缩写“PHP: Hypertext Preprocessor”。顶峰时,PHP 3 安装在互联网大约 10% 的 Web 服务器上。1999年,Zend 公司成立,直到今天,Zend 仍在继续为 PHP 做出贡献并积极参与其中。

最初没有 PHP 的正式规范,在着这种情况下该语言仍持续发展了 20 年的时间。直到 2014 年,PHP 规范出现。PHP 语言规范在 Facebook 内部开发,然后转移到了公共领域。

而与此同时,除了这个 25 周年纪念日外,PHP 8.0 也有望在今年发布。程序员 Brent Roose 透露了即将在 2020 年 11 月底发布的 PHP 8.0 中即将发布的功能。此版本的第一个 Alpha 版将于 6 月 18 日发布。同时,PHP 8.0 将引入多项重大更改,并引入一些新功能,例如 JIT 编译器、联合类型和属性。

JIT 编译器

Roose 解释称,尽管还没有基准测试,但 JIT 编译器有可能改善 PHP 的性能。不像 C 或 Java 这样的编译语言,PHP 是一种解释性语言,这意味着它会在运行时转换为机器码。JIT 在运行时编译部分代码,以便可以使用代码的编译版本。并表示,将 JIT 编译器添加到 PHP 的原因是,它可能使其能够在 Web 开发上下文之外被视为一种高性能语言,并且可以随着时间的流逝而得到改进。但是,一个很大的缺点是维护起来很复杂。

联合类型

联合类型是两种或多种类型的集合,表示可以使用其中任何一种。而由于 PHP 是一种动态类型的语言,因此联合类型有很多用例。

属性

属性在其他语言中通常称为注解,它提供了一种向类添加元数据的方法,而无需解析文档块。

RFC 中的属性示例:

有关功能和代码示例的完整列表可查看博客。

展开
收起

3分钟短文|PHP 数值格式化,前导0还能这么加!

引言

编写程序过程中,经常需要处理小数,或整型数据。比如订单号,通过拼接多段业务数据成为新的字符串。今天我们来说一下,如何在数值格式化的时候。为其进行前导零补全。

学习时间

比如有一个需求,对于0-9的正整数进行格式化,使其输出 00-09。在 PHP 中应该怎么写呢?

首先肯定是从 C 语言就继承来的 sprintf 这个格式化函数。

$s = sprintf('%02d', $digit);

其中格式化 02 表示左侧至少是2位整数,多出的部分不管,不够的补零。

既然都是字符串格式化,我们借助 PHP 提供的字符串补全函数 str_pad,也可以达到相同的效果。代码这样写:

echo str_pad($digit, 2, "0", STR_PAD_LEFT);

注意参数,2是补全的长度,超过的不用补,不够的至少补到2位。“0”是用于补全的字符,STR_PAD_LEFT 常量用于指定左补全。

下面是一些 str_pad 的用法:

$input = "Alien";echo str_pad($input, 10); // 输出"Alien " echo str_pad($input, 10, "-=", STR_PAD_LEFT); // 输出"-=-=-Alien" echo str_pad($input, 10, "_", STR_PAD_BOTH); // 输出"__Alien___" echo str_pad($input, 6 , "___"); // 输出"Alien_"

深入讨论

上面给出的2种补全的方式,哪种效率更高一些呢?我们通过代码进行测试:

上述代码在 PHP 5.3 的基准测试中,结果是这样的:

str_pad : 0.286863088608sprintf : 0.234171152115可以看到,在较为频繁地使用前导处理时,格式化函数 sprintf 所使用的时间更少,也从侧面证明了这个老牌函数的坚固可用。

写在最后

本文通过两个 PHP 函数演示了对于数值的前导补零操作,并且经过测试也发现使用频次较高的 sprintf 函数更胜一筹。

我们也提倡在代码中使用 sprintf 用于格式化,其功能非常可靠。特别需要注意的是,格式化元字符对于特殊字符的处理一定要慎重。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

展开
收起

PHP知识点:从'xulei' == 0是否为真谈谈运算符===和==

if('xulei' == 0){

echo 1;

}else{

echo 2;

}

据说这是一道小米的php面试题,看到题目想当然的以为输出的是:2,在代码中验证了一下输出的是:1。惊出一身冷汗,赶紧翻一翻php官网手册。

以下摘抄一段php手册中的用户贡献的笔记:

The way PHP handles comparisons when multiple types are concerned is quite confusing.

PHP处理不同类型值的比较的方式是令人困惑的。

For example:

举个例子:

"php" == 0

这是真的,因为在比较时字符串将转化为一个整数。任何字符串(不是数字),转化成一个整数时将是0。

Note that php comparison is not transitive:"php" == 0 => true0 == null => truenull == "php" => false

坑在哪里?

php是一门弱类型语言,强类型和弱类型主要是站在变量类型处理的角度进行分类的。强类型是指不允许隐式变量类型转换,弱类型则允许隐式类型转换。所以,关键在于变量数据类型的转换。

什么叫隐式类型转换?

隐式是指源码中没有明显的类型转换代码,也就是说,一个变量,你可以直接给他赋值字符串,也可以直接给他赋值数值,你还可以直接让字符串类型的变量和数值类型的变量相加,虽然得出的最终结果未必是你想象的那样,但一定不会报错。

也就是说在上例的比较运算中,发生了变量类型的转换,但字符串与数字作比较的时候,字符串会被转换为数字,而不是数字的字符串转化成整数时会被转化成0。

再来补充一些

$a='2';//字符型2$b=2;//数值型2$a==$b,是对的,都是2$a===$b,是不对的,因为$a是字符型$b是数值型,值虽一样,但类型不一样。

展开
收起

PhpStudy V8.0如何建立WordPress网站?附图文教程

前面 boke112 跟大家分享了『PhpStudy V8.0 如何建立 ZBlogPHP 网站?附图文教程』,今天我们就继续以建立 WordPress 站点为例说明一下 PhpStudy V8.0 是如何建立 WordPress 网站的?

1、前往WordPress 官网下载中文最新版 wordpress-5.2.3-zh_CN,或点此直接下载。然后将 wordpress-5.2.3-zh_CN 压缩包拷贝到 WWW 根目录并解压得到一个 wordpress 文件夹,内含有 WordPress 建站所需的文件。

2、运行 PhpStudy V8.0 并启动 Apache 和 MySQL,点击“网站”>> 点击【创建网站】按钮 >> 在基本配置中输入域名(PS:可随意)>> 点击根目录右侧的【浏览】按钮选择我们第 1 步的 wordpress 文件夹 >> 可选择 PHP 版本,默认是 PHP7.3.4 >> 备注的话建议填写一下,如 WordPress 演示站之类的说明。具体如下图:

3、因为我们是第一次创建 WordPress 网站,所以在“创建环境”中勾选“创建数据库”,然后输入数据库名称、用户名和密码(PS:密码不得少于 6 位否则创建数据库失败),最后点击【确认】按钮。具体如下图所示:

稍等片刻出现“创建数据库完成”提示后点击【确认】按钮即可成功创建网站(PS:建立 WordPress 网站还需要继续安装才行,请看第 4 步)。

至于其他的选项,如高级配置、安全配置、错误页面、伪静态和其他等,因为只是在本地测试网站所以可以不用理会,有意的可自行点击来查看和设置。

4、点击刚才创建的网站右侧的“管理 > 打开网站”即可打开 WordPress 站点的安装程序进行傻瓜式安装。如果不懂得 WordPress 安装的请继续往下看。

5、正常情况下,能够打开以下欢迎使用 WordPress 就表示可以正常安装 WordPress,我们只需要点击【现在就开始!】按钮即可。具体见下图:

6、根据第 3 步创建的数据库信息填写数据库连接信息,真实建站中,建议修改表前缀,如 wp_ 改为 boke112_,然后点击【提交】按钮 >> 点击【现在安装】按钮。

7、填写站点标题、站点管理员的用户名及密码、电子邮件,因为是本地测试网站,建议勾选“建议搜索引擎不索引本站点”(PS:真实建站的时候,如果站点内容还没有也建议勾选,站点正常的情况下不要勾选,事后可以在后台 >> 设置 >> 阅读中重新设置),然后点击【安装 WordPress】按钮即可成功安装 WordPress。具体见下图:

至此,我们已经成功安装 WordPress。点击【登录】按钮即可打开后台登录页面,输入第 7 步所填写的用户名及密码即可成功登录 WordPress 站点后台。

其实,WordPress 建站和 ZBlogPHP 建站都差不多,都是傻瓜式操作,根据步骤一步步操作即可成功建立相应网站。如果你是第一次接触 WordPress 的话,建议参阅『WordPress 新手入门教程』。

展开
收起

互联网基础知识学习:php函数浅析笔记2

我们接着上一节的内容。

01php并值运算

在php中,只有一个字符串运算符,就是“.”,用于将两个字符串连接起来。使之看起来更为连贯。如下图示例是将两个字符串连接到了一起。

将两个字符串链接起来的实例

上图中的代码输出结果为:Hello world! What a nice day!

02php的strlen()函数

如果学习过C/C++的人对这个函数都比较熟悉,该函数是用来计算字符串的长度的!常用语while或者for等循环中,用于提示达到某个字符串的长度时,循环结束。

例如,我们想要通过php来计算一个字符串的长度,可以通过如下代码来实现:

<?php

echo strlen("This is php");

?>

上述代码运行结果为:11(this is php 的长度)。

03PHP strpos() 函数

strpos() 函数:该函数用于在字符串内查找一个字符或字符串。

如果在字符串中找到匹配的字符或者字符串,则会返回第一个匹配的字符位置。如果找不到匹配项,则返回 FALSE。

<?php

echo strpos("Hello world!","world");

?>

上述代码表示在Hello world!中查找world,由于前一个字符串包含了要查找的内容,所以该代码运行的结果就是返回world首字母所在的位置,也就是第六个位置,所以运行结果为6(数组的编号是从0开始第七个位置)。

04php数组

数组是一个能在单个变量中存储多个值的特殊变量。在php语言中,使用array()来创建数组。在 PHP 中,有三种类型的数组:

数值数组; 带有数字 ID 键的数组。$stu = array("Jhon", "Peter","Tom")关联数组:带有指定的键的数组,每个键关联一个值。例如:$age=array("张三"=>"25","李四"=>"26","王二"=>"27")或$age['张三']="25";$age['李四']="26";$age['王二']="27";多维数组: 包含一个或多个数组的数组。数组长度:使用count()函数。遍历数值数组:使用for\while等循环。如遍历上述数组中的配个元素并打印出来:$stu_length = count($age); for($i=0; i<$stu_length; $i++){echo $stu[$i]}遍历关联数组:使用的是foreach循环。对上述的关联数组进行循环代码如下:$age=array("张三"=>"25","李四"=>"26","王二"=>"27"); foreach($ageas$x=>$x_value){echo"Key=" . $x . ", Value=" . $x_value; echo"<br>";}

05数组排序常用函数

数组排序主要用到如下函数:

sort() :对数组进行升序排列rsort() :对数组进行降序排列asort():根据关联数组的值,对数组进行升序排列ksort():根据关联数组的键,对数组进行升序排列arsort() :根据关联数组的值,对数组进行降序排列krsort() :根据关联数组的键,对数组进行降序排列下图代码展示了使用ksort()函数对关联数组进行了升序排列

对关联数组进行升序排列php和array相关的部分函数说明

上述就是本次为大家分享的内容,大家有什么看法,欢迎留言讨论,也希望大家多多点赞关注,祝各位生活愉快!

展开
收起

互联网基础知识学习:php语言浅析

01为什么说PHP 是一门弱类型语言

1、php在声明变量时不必向 PHP 声明该变量的数据类型。

2、PHP 的变量在使用时,会根据变量的值,自动把变量转换为正确的数据类型。

而在在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称,否则编译器会报错。

02PHP变量声明的独有方式

php的变量声明和其他语言的不同的地方在于:变量名称前要加“$"符号,而其他语言诸如C/C++以及python等不需要加任何特殊的符号。如下图:

php语言简单示例

在上图中:变量 txt将保存值 Hello world!,且变量 x 将保存值 5。这里的变量txt、x、y变量前都增加了"$"这个符号。

另外需要注意的是:当您赋一个文本值给变量时,请在文本值两侧加上引号。

php的变量定义规则如下:

变量以 $ 符号开始,后面跟着变量的名称变量名必须以字母或者下划线字符开始变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )变量名不能包含空格变量名是区分大小写的($y 和 $Y 是两个不同的变量)

03php究竟是什么?

通过上面的示例,大家可能心中有个疑问——说了这么多,PHP究竟是什么呢?

和目前流行的python、shell等语言一样,其实php也是一种脚本语言。PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。php文件:PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器PHP 文件的默认文件扩展名是 ".php"

04php能做什么?

PHP 可以生成动态页面内容。PHP 可以创建、打开、读取、写入、关闭服务器上的文件。PHP 可以收集表单数据。PHP 可以发送和接收 cookies。PHP 可以添加、删除、修改您的数据库中的数据。PHP 可以限制用户访问您的网站上的一些页面。PHP 可以加密数据。通过 PHP,您不再限于输出 HTML。您可以输出图像、PDF 文件,甚至 Flash 电影。您还可以输出任意的文本,比如 XHTML 和 XML。总的来说,如果我们要开发一个便于大家浏览的网页,基本上都会用到php的相关知识。

05为什么在网页类开发都会用到php知识呢?

PHP 可在不同的平台上运行(Windows、Linux、Unix、Mac OS X 等)。PHP 与目前几乎所有的正在被使用的服务器相兼容(Apache、IIS 等)。PHP 提供了广泛的数据库支持。PHP 是免费的,可从官方的 PHP 资源下载它。PHP 易于学习,并可高效地运行在服务器端。也就是说,正是由于php兼容性高,跨平台运行方便、有种广大的数据库支持(开源的数据库)并且是免费的且易于学习,是的php在互联网开发方面具有重大的作用。

06php语言的echo和print语句

在php语言中,echo和print语句的功能类似,都是将对应的结果输出(打印)出来。

两者的区别在于:echo能够同时输出一个或者多个字符串,但是print只能输出一个,返回值一直是1(输出结果)。如下图所示:

echo一次能够输出多个字符串print一次只能输出一个字符串

这就是本次为大家分享的内容,希望大家喜欢。同时也希望大家多多点赞关注,祝各位生活愉快。

展开
收起

零基础的小白如何学编程

简介:本人17岁,现是一名java开发攻城狮,在学习编程的路上很多小伙伴很迷茫,下面给大家聊一下如何才能学好编程呢?

俗话说人要有目标,学习编程也是一样的道理。朝着自己的目标前进,往往会事半功倍。经常遇到很多人问,现在java好找工作吗?听说Python很厉害,我要不要学Python呢?技术一直在更新,今天可能Python很火,明天可能C#很火,这些都是预料不到的事情。往往自己正确的选择更为重要,选择自己感兴趣的方向,你才肯花时间去学习,因为只有这样你才有前进的方向。

学习目标:首先你要决定你的学习方向,例如我对java感兴趣,我就会把时间全部投入到java的学习过程中,切勿今天学习python,明天又想学习java,没有目标的人注定不能成功!

学习态度:在学习编程的过程中肯定会枯燥乏味,请你一定要坚持住。有很多人说学java开发的人太多了,我怕我找不到工作。其实成功的道路并不拥挤,在于你是否能坚持下来。你坚持住了,下一个开发攻城狮将会是你

学习方法:现在百度、谷歌……浏览器好像你想要的都能搜索到,一个真心想学习的人他会想很多办法来找学习资料,下面我给大家提供一些学习网站。希望对新手有帮助!慕课网、极客学院、腾讯课堂……一些培训机构的视频教程还是非常不错的,大部分网站都有提示你学习的路径,按照流程学习即可!

新手学习编程的时候本人不建议看太多的书籍,看书反而越看越懵逼,可能都会看到你怀疑人生,建议大家是【视频+书】组合,视频看完了,然后看着书回忆一下,加深印象。说到书,java的书籍也是一大堆,在这里推荐一下《Java核心技术 卷1/卷2》。

笔记:学过的知识,建议大家记录下来,方便下次回顾,大脑有限,你不可能什么都记得非常清楚。有道云笔记就不错哦!

代码:编码是重中之重,你就算把一本书或视频全部看完了,或与很多知识点你都能说出来,但是请记住公司给你发工资不是请你去吹流弊的,代码不会写等于0。

跟好人学好人,跟猫子学咬人。跟一群热爱学习和有目标以及有梦想的人在一起,你会进步很快,否则反之,多认识一些对你学习有帮助的人,因为他们会让你的技术和各方面迅速提升!

本文来自PHP中文网,更多相关知识点请前往PHP中文网视频课程频道!

展开
收起

零基础怎么学习php?

PHP做于一种开源脚本需要,因为语法吸收的C语言、Java和Perl的特点是比较容易学习的。如果你有学过C语言或JAVA语言,会觉得上手很简单。

那么,如果你指的是编程零基础,只是一个会点电脑的小白,是不是意味着就不能学了呢?答案是否定的。

因为PHP在WEB领域应用最为广泛,所以如果你作为纯小白,在开始学习之前不妨先了解前端、后端、数据库、服务器这些概念。对这些概念有了初步了认识后便可以着手学习了。

HTML+CSS ,先学一点网页制作。最好再学一点javascript 。毕竟懂一点前端对后端开发来说是很有必要的。了解前端后便可以开始学习PHP了,语法,关键字,常量,数据类型等等。数据库,WEB服务器的学习。PHP的最佳搭档 是:Mysql(数据库),Apache(web服务器), 对于Apache,平时操作得比较少,懂得其配置即可。而Mysql则特别重要。初期懂得如何用PHP操作Mysql进行增删改查,了解常用的Mysql 优化原则,能使用PHP+Mysql写出简单的留言板页面。PHP深化。掌握Ajax异步传输,学习面向对象,学习MVC框架并掌握流行的PHP框架,如Yii框架,国内的ThinkPHP框架,形成良好的编码习惯。能快速用框架开发网站。大型网站的优化技术:如页面静态化,Memcached缓存技术,MySql数据库深度优化等。

等到你学会了一种编程语言,再去学另一种也是没什么问题的。编程语言只是工具,要写出最棒的代码靠的还是编程思想。

编程远没有想象中那么复杂,打好基础,不断发现编程的乐趣,你会发现另一个世界。

展开
收起

php入门教程:从0开始学php第一课 php是什么?

第一课 php是什么?

大家好,欢迎来到山鹰课堂,首先我自我介绍一下,本人89年,网名山鹰,山东临沂人,2010年北漂7个月,之后一直在临沂,目前在一家临沂本地电商公司做技术开发。我呢研究php到现在差不多10年的时间了,很久以前就想出一套适合新手入门的php教程,由于各种原因一直拖到现在。

在教程正式开始之前,给大家说一下学习php的各种疑虑。很多人说我没有任何基础我能学会吗?我不会英语我能学会吗?我数学不好我能学会吗 …… 这一些列的疑虑都不是问题,编程就是用来解决具体问题的,我们的教程会以具体的需求出发,步步深入。只要你会电脑基础操作,有一颗上进心就够了!学习的道路上免不了各种浮躁,希望大家可以静下心,踏踏实实地学下去。

phpshi'shen'm

在php的学习道路上,我觉得一切要从需求出发,如果一上来就开始各种理论学习,相信会有很多人坚持不下去,即便是硬撑着学下去,也会边学边忘没有任何效果。这也是我自己的亲身体会,所以本套教程会从实际需求出发,一步步引导初学者进入php的世界。

我给大家解释一下什么是从需求出发?

首先我们要明白php是什么,

PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。

以上描述估计新手朋友也很难理解,所以我们干脆直接了解下php能干什么!

php能干什么!

php能开发出一个企业展示网站吗? 能!

php能开发出一个购物商城吗? 能!

php能开发出一个会员管理系统吗? 能!

……

以上就是具体的需求,如果今天第一课就教会大家怎么用php开发出一个企业网站显然是不可能因为需求太大,所以我们就把大需求拆成小需求,也就有了我们的第一个需求:

php能实现1+1等于2吗?

现在需求已经有了,下面就是怎么实现了,先来给大家看一下实现这个需求的php代码:

php演示dai'm

以上代码被执行后,会得出1+1=2的结果,也就实现了我们的第一个需求。

讲到这里相信大家脑袋里都会有一个疑问,代码有了,怎么运行呢?

好了,今天的教程就到这里,希望大家带着这个疑问好好的思考一下,或者是自行百度一下,这也是我们第一课的课后作业,下一课我们将解密php代码怎么运行、以及php运行环境的搭建!

希望我的教程能给大家的php学习之路带去帮助,谢谢大家,下节课我们再见!山鹰课堂,专注电脑知识、php编程、前端技术等教程分享,觉得教程有用的朋友点赞加关注,点关注,不迷路,一大波干货教程在路上!

展开
收起