在PHP中可以使用内置函数array_unique()来直接删除重复元素,也可以使用array_flip()函数来间接删除重复元素。
1.array_unique()函数
array_unique()函数可以移除数组中的重复的值,并返回结果数组;当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。
代码示例:
<?php$result1 = array("a" => "green", "red", "b" => "green", "blue", "red");var_dump($result1);$result2 = array_unique($result1);var_dump($result2);?>
输出:
2.array_flip()函数
array_flip()是反转数组键和值的函数,它有个特性就是如果数组中有二个值是一样的,那么反转后会保留最后一个键和值,利用这个特性我们用他来间接的实现数组的去重。
代码示例:
<?phpheader("content-type:text/html;charset=utf-8");$a = array(1, 5, 2, 5, 1, 3, 2, 4, 5);// 输出原始数组echo "原始数组 :";var_dump($a);// 通过使用翻转键和值移除重复值$a = array_flip($a);// 通过再次翻转键和值来恢复数组元素$a = array_flip($a);// 重新排序数组键$a = array_values($a);// 输出更新后的数组echo "更新数组 :";var_dump($a);?>
输出:
以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目。
这是一道CTF中常见的题目,我们来看一下题目描述(其实ctf中题目描述很多都是没用的,甚至还会误导我们)
题目描述先让我们找密码:
打开这个页面,似乎并没用什么东西出现。根据经验我们要看一下源码有没有东西!
右键查看源码:发现有个注释掉的index.txt
我们来看一下index.txt,果真提示性代码出来了。
isset($_GET['password'])//满足passwd不为null strcmp($_GET['password'], $flag) == 0//password和flag相等
其实这么多就这两行有用(让我想到了开发最后就是再写if/else),看到上面我注释好的passwd满足的条件了把,password不为null且password和flag字符串相同?
第一个不为null很好满足,那第二个条件呢?看似strcmp函数对比两个字符串相同则返回0否侧返回正数或者负数,但是很明显我们要是知道flag我们还做它干啥,这里一定要看清和0对比是用的==而不是===,这就是php的魅力,===是要类型,内容相等,而==只要内容相等即可。
什么是内容相等呢,false和0是相等的,那这里我们想strcmp函数中什么时候会返回false呢,只有当对比的两个对象不是同一类型时会返回false。
这里我们就想flag肯定是字符串,那我们让password为数组的情况下肯定返回为false了。
构造如下:
flag就出来了!
虽然这是一个CTF题目,但是php开发的小伙伴一定要注意再strcmp和==同时使用时候的特点,避免留下漏洞被利用。
任何一门编程语言的语法都会涉及到变量,而每位程序员也都会和它打交道,变量准确的定义是“是计算机语言中能储存计算结果或能表示值抽象概念”,想要更好理解变量需要先弄清内存和变量的关系。
内存:内存是暂时存储程序以及数据的地方,所有程序都是在内存中运行的。
变量:变量代表了一段可操作的内存,也可以认为变量是内存的符号化表示。
Php中变量与内存的关系下面为大家介绍“php中变量有哪些特点?”
1、直接赋值
PHP是弱类型语言,其变量声明和使用比较方便。Php变量它不仅仅包含变量的值,也包含变量的类型。
php程序输出结果
输出结果2、php变量使用注意事项
变量以 $ 符号开头,其后是变量的名称
变量名称必须以字母或下划线开头
变量名称不能以数字开头
变量名称只能包含字母数字字符和下划线
变量名称对大小写敏感
php变量作用域3、php变量作用域
三种不同的变量作用域:
local(局部变量:函数内使用)
global(全局变量:函数内外使用)
static(静态)
局部变量和全部变量的划分标准是以函数为标准。
php变量类型4、php变量类型
包括.普通变量($a = "php")、可变变量(使用两个美元符号“$”)、静态变量(static仅在函数内部)、全局变量(自定义 $GLOBALS 数组)
以上是常见的php变量类型大家一定要熟练掌握。
怎么理解php中的变量?
程序中的变量源于数学,在程序语言中能够储存结果或者表示抽象概念。简单理解变量是临时存储值的容器,它可以储存数字、文本、和一些复杂的数据(比如说字符串、复杂的排列组合等),变量在php语言中居于核心地位,是使用php的关键所在,变量的值在程序运行中会随时发生变化,能够把程序中准备使用的一段数据起一个简短容易记得名字,另外它还可以保存用户输入数据和特点运算的结果,总结变量是变量是用于跟踪几乎所有类型信息的简单工具。
php语言中的变量
php数据存储单元是变量和常量存储各种类型的数据,php是一种弱类型的语言,使用变量前不用声明变量,赋值时就是创建了变量,这个原因使的php语法和c语言、java(强类型语言)有很大的不同。
php变量的声明和注意
在php声明变量必须使用一个美元符号“$”后面跟变量名表示,然后再使用赋值操作(=)给一个变量赋值。如图所示
php变量声明后有一定的使用范围,大部分php变量不是在函数中里声明的,只有声明处到文件结束的一个单独范围使用,这个单独范围可以在一个页面的所有的php模式下使用,也包括了include和require引入文件,在变量使用周期内可以用unset()释放指定的变量,使用isset()检查变量是否设置,使用isempty()检查变量是否为空。
php变量命名规则
1、区分大小写
$A和$a$ 是两个不同的变量,(系统内置结构和关键字,用户自定义类和函数名是区分大小写)。
2、变量以 $ 符号开头,其后是变量的名称。
3、变量名称必须以字母或下划线开头而且不能以数字开头。
4、变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
如果变量是字母构成,通常采用全部小写方式作为变最名。如果变量是由多个单同构成,第一个字母全部用小写,以后的每个字母大字。如:$aaaBbbCcc风格,建议大家可以使用这种变量命名方式,关于php变量今天先介绍到这,明天继续介绍,大家有的好的想法可以一块讨论下!
PHP跨域访问
PHP是通过 header() 来设置Header头部来解决客户端的跨域问题的。1、允许单个域名访问指定某域名(a)跨域访问域名(z),则只需在b文件头部添加如下代码:<?phpheader('Access-Control-Allow-Origin:a');2、允许多个域名访问指定多个域名(a、b等)跨域访问(z),则只需在域名z项目的入口文件头部添加如下代码:<?php$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; $allow_origin = array( 'a', 'b' ); if(in_array($origin, $allow_origin)){ header('Access-Control-Allow-Origin:'.$origin); }3、允许所有域名访问允许所有域名访问,则只需在域名(z)文件头部添加如下代码:<?phpheader('Access-Control-Allow-Origin:*');4、设置Preflight Request(预检请求)中,将会在正式请求的 Access-Control-Expose-Headers 字段中出现的首部信息<?phpheader("Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept,Authorization");5、设置允许跨域请求的方法<?phpheader('Access-Control-Allow-Methods:GET,HEAD,POST,PATCH,PUT,OPTIONS,DELETE,CONNECT,TRACE');
6、Tips
请注意 header() 必须在任何实际输出之前调用,不管是普通的 HTML 标签,还是文件或 PHP 输出的空行,空格。这是个常见的错误,在通过include,require,或者其访问其他文件里面的函数的时候,如果在header()被调用之前,其中有空格或者空行。 同样的问题也存在于单独的 PHP/HTML 文件中。
设置中的选项值,有的并未给全,更多资料,详见【MDN WEB DOCS】
php运算符的定义是什么?
昨天给大家谈了程序的变量和常量,今天给大家聊聊运算符,运算符和变量是每种计算机编程语法必不可少的,运算符是指于执行程序代码运算,它会针对一个以上操作数来运算,它是执行某种运算的符号,又称操作符如图所示
php运算符php运算符分类
可以根据操作数的个数分为一元运算符、二元运算符、三元运算符。
一元运算符只运算一个值,比如说++或者--。
二元运算符可以运算两个值,在php中大部分都是二元运算符。
三元运算符可以运算三个值,三元运算符只有一个“?:”。
根据运算符的功能可以分为算术运算符、字符串运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、其他运算符七大类。
算术运算符
是php中常用的运算符,常见的数据操作符,处理加、减、乘、除、取余等运算,如下图所示。
这里需要注意的是求模运算符“%”,在做求模运算时首先会将%运算符两边的操作数转换为整型,然后返回第一个操作数除以第二个操作数后所得到的余数。在程序开发时使用求模运算符通常有两个目的,第一个目的是做整除运算,另一个目的的,让输入的数不超过某个范围。
递增递减运算符怎么用?
在编程中经常遇到对变量进行加1或者减1,递增递减运算符是一元运算符,但是这两个并不是唯一的选择,
<?php
$sum=$sum+1;
$sum+=1;
++$sum;
?>
这3个语句都是给变量$sum递增1,第三句是使用了递增运算符,是最简洁的一种。这个运算符不同于前面介绍的,它可以直接修改其操作数的值,表达式的结果是递增变量的值,再在表达式中使用已递增的值。递增运算符可以在变量前使用,也可以在变量后面使用,这样就决定了先运算还是先使用。
递增运算符<?php
$a=2;
$b=$a++;
?>
在上面这个例子中,执行后,$a的值为3而$b的值为2.先将$a的值赋给$b,后在$a的值加1。而下面的语句被执行后,$a和$b值都是3,首先将$a的值加1.然后将$a的值赋给$b
<?php
$a=2;
$b=++$a;
?>
关于php中的运算符今天就讨论到这,如果你有好的想法咱们可以一块讨论!
如果请求web服务时在X-Powered-By中显示php的详细版本号,可以通过以下方法屏蔽调,防止泄露服务器的敏感信息。
在php.ini找到
expose_php =On
修改成
expose_php =Off
然后重启php fpm(或者干脆重启Web服务器)即可。
PHP7版本中的新特性有哪些?
一点PHP博客分享关于php7.0中的一些新特征,在PHP7中由于修改了底层引擎大部分代码,以及通过各种方式提高PHP的性能,所以在PHP7中也增加了一些新的语法,这些语法的使用也能对提高性能有帮助。
1.标量参数类型声明
现在支持字符串(string)、整型(int)、浮点数(float)、及布尔型(bool)参数声明,以前只支持类名、接口、数组及Callable两种风格:强制转换模式(默认)与严格模式
2.返回类型声明
3.??运算符
?? 用于替代需要isset的场合,这是一个语法糖。
4.<=> 比较运算符
就是看两个表达式值的大小,三种关系: = 返回0、< 返回-1、 > 返回 1
5.define支持定义数组类型的值
php 5.6已经支持CONST 语法定义数组类的常量,PHP7中支持define语法。
6.匿名类
7.增加了整除函数 intdiv
小结:
新特性
性能提升:PHP 7要比PHP 5.6快两倍,具体如何让PHP7中的性能达到最大化,可以看之前博主发的一篇文章。
全面一致的64位支持
移除了一些老的不在支持的SAPI(服务器端应用编程端口)和扩展
新增了空接合操作符(??)
如果觉得对你有帮助,请点点关注,也是对我的一种支持和鼓励,关注后查看更多内容。
不忘初心,继续编程。
官方说明:
在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针:例如你不能对他们做指针运算,他们并不是实际的内存地址。替代的是,引用是符号表别名。注意在PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身——变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的硬链接。
&:表示引用,在变量或者函数、对象等前面加上该符号
&符号使用场景
变量引用
引用允许用两个变量来指向同一个内容
变量引用函数引用传递(传址调用)
可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值
函数引用传递函数引用返回
引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!
函数引用返回对象引用
在PHP5以上,对象的 = 赋值和传递都是引用。要想实现拷贝副本,需要通过clone函数进行处理。
PHP中对象的深拷贝,指的是拷贝对象副本,也就是用clone函数拷贝出一个完全一样的对象,修改该对象,并不会影响原始对象;
PHP中对象的浅拷贝,指的是对象进行引用赋值,其中一个改变,另一个也随之改变。
对象引用引用取消
使用unset(),unset 一个引用,只是断开了变量名和变量内容之间的绑定。(这并不意味着变量内容被销毁了)
在PHP中“|”和“||”都是OR(或)运算符,那么它们之间有什么区别?下面本篇文章就来带大家认识一下运算符“|”和“||”,对它们进行简单比较,了解它们之间的区别。
运算符“|”
它是一个按位OR运算符,二元运算符;它对变量的位进行操作。如果有两个变量a,b,进行$a | $b;则是将把 $a 和 $b 中任何一个为 1 的位设为 1。
示例:
$a = 3; $b = 10; echo $a | $b; ?>
输出:
说明:
在上面的示例中,给定两个值,a = 3和b = 10;然后将这两个数字转换为二进制数,即a = 0011和b = 1010;最后应用OR(|)运算并计算$a | $b的值。
运算符“||”
这是一个逻辑OR运算符,布尔运算符;它对变量的布尔值进行操作。如果其中任何一个变量的布尔值为true,则$a || $b的值为1。
示例:
$a = 3; $b = 10; echo $a||$b; echo ''; if($a = 3 || $b = 0) echo '1'; else echo '0'; ?>
输出:
说明:
在上面的示例中,给定两个值,a = 3和b =10;因此变量a和变量b的布尔值都为true,则$a||$b的值为1;在if语句中,检查其中一个条件是否为真,因为变量a值被设置为3,布尔为true,因此执行“$a = 3 || $b = 0”的值为1。
以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!