PHP删除元素的四种方法

 更新时间:2017年7月6日 23:34  点击:1803
本篇文章主要介绍了PHP从数组中删除元素的四种方法实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

茴香豆的“茴”字有四种写法,PHP从数组中删除元素也有四种方法 ^_^。

删除一个元素,且保持原有索引不变

使用 unset 函数,示例如下:

 

 代码如下复制代码

<?php

  $array=array(0 =>"a", 1 =>"b", 2 =>"c");

  unset($array[1]);

        //↑ 你想删除的key

?>

 

输出:

Array (
    [0] => a
    [2] => c
)

使用 unset 并未改变数组的原有索引。如果打算重排索引(让索引从0开始,并且连续),可以使用 array_values 函数:

 

 代码如下复制代码

$array=array_values($array);

/*

输出

array(2) {

 [0]=>

 string(1) "a"

 [1]=>

 string(1) "c"

}

*/

 

删除一个元素,不保持索引

使用 array_splice 函数,示例如下:

 

 代码如下复制代码

<?php

  $array=array(0 =>"a", 1 =>"b", 2 =>"c");

  array_splice($array, 1, 1);

            //↑ 你想删除的元素的Offset

?>

 

输出:

Array (
    [0] => a
    [1] => c
)

按值删除多个元素,保持索引

使用 array_diff 函数,示例如下:

 

 代码如下复制代码

<?php

  $array=array(0 =>"a", 1 =>"b", 2 =>"c");

  $array=array_diff($array, ["a","c"]);

               //└────────┘→ 你想删除的数组元素值values

?>

 

输出:

Array (
    [1] => b
)

与 unset 类似,array_diff 也将保持索引。

按键删除多个元素,保持索引

使用 array_diff_key 函数,示例如下:

 

 代码如下复制代码

<?php

 

  $array=array(0 =>"a", 1 =>"b", 2 =>"c");

  $array=array_diff_key($array, [0 =>"xy","2"=>"xy"]);

                  //↑      ↑ 你想删除的数组键keys

?>

 

输出:

Array (
    [1] => b
)

与 unset 类似,array_diff_key 也将保持索引。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本网站。

 

PHP也是现在很多人工作中需要用到的,今天文章就给大家介绍下php正则表达式基本知识与应用,对正则表达式感兴趣的下面一起来看看。

本文实例讲述了php正则表达式基本知识与应用。分享给大家供大家参考,具体如下:

  概述

  正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配、替换、截取匹配的字符串。常用的语言基本上都有正则表达式,如JavaScript、Java等。其实,只有了解一种语言的正则使用,其他语言的正则使用起来,就相对简单些。文本主要围绕解决下面问题展开。

  ① 有哪些常用的转义字符

  ② 什么是限定符与定位符

  ③ 什么是单词定位符

  ④ 特殊字符有哪些

  ⑤ 什么是逆向引用以及怎样使用逆向引用

  ⑥ 匹配模式

  ⑦ php中怎样使用正则表达式

  ⑧ php中哪些方面需要用到正则

  ⑨ 怎样进行邮箱匹配,url匹配,手机匹配

  ⑩ 怎样使用正则替换字符串中某些字符

  ⑪ 贪婪匹配与惰性匹配区别

  ⑫ 正则表达式之回溯与固态分组

  ⑬ 正则优缺点有哪些

  正则表达式的基本知识汇总

  行定位符(^与$)

  行定位符是用来描述字符串的边界。“$”表示行结尾“^”表示行开始如"^de",表示以de开头的字符串 "de$",表示以de结尾的字符串。

  单词定界符

  我们在查找的一个单词的时候,如an是否在一个字符串”gril and body”中存在,很明显如果匹配的话,an肯定是可以匹配字符串“gril and body”匹配到,怎样才能让其匹配单词,而不是单词的一部分呢?这时候,我们可以是哟个单词定界符\b。

  \ban\b 去匹配”gril and body”的话,就会提示匹配不到。

  当然还有一个大写的\B,它的意思,和\b正好相反,它匹配的字符串不能使一个完整的单词,而是其他单词或字符串中的一部分。如\Ban\B。

  选择字符(|) ,表示或

  选择字符表示或的意思。如Aa|aA,表示Aa或者是aA的意思。注意使用”[]”与”|”的区别,在于”[]”只能匹配单个字符,而”|”可以匹配任意长度的字符串。在使用”[]”的时候,往往配合连接字符”-“一起使用,如[a-d],代表a或b或c或d。

  排除字符,排除操作

  正则表达式提供了”^”来表示排除不符合的字符,^一般放在[]中。如[^1-5],该字符不是1~5之间的数字。

  限定符(?*+{n,m})

  限定符主要是用来限定每个字符串出现的次数。

限定字符含义
零次或一次
*零次或多次
+一次或多次
{n}n次
{n,}至少n次
{n,m}n到m次

  如(D+)表示一个或多个D

  点号操作符

  匹配任意一个字符(不包含换行符)

  表达式中的反斜杠(\)

  表达式中的反斜杠有多重意义,如转义、指定预定义的字符集、定义断言、显示不打印的字符。

  转义字符

  转义字符主要是将一些特殊字符转为普通字符。而这些常用特殊字符有”.”,”?”、”\”等。

  指定预定义的字符集

字符含义
\d任意一个十进制数字[0-9]
\D任意一个非十进制数字
\s任意一个空白字符(空格、换行符、换页符、回车符、字表符)
\S任意一个非空白字符
\w任意一个单词字符
\W任意个非单词字符

  ###显示不可打印的字符

字符含义
\a报警
\b退格
\f换页
\n换行
\r回车
\t字表符

  括号字符()

  在正则表达式中小括号的作用主要有:

  改变限定符如(|、* 、^)的作用范围

  如(my|your)baby,如果没有”()”,|将匹配的是要么是my,要么是yourbaby,有了小括号,匹配的就是mybaby或yourbaby。

  进行分组,便于反向引用

  反向引用

  反向引用,就是依靠子表达式的”记忆”功能,匹配连续出现的字串或是字符。如(dqs)(pps)\1\2,表示匹配字符串dqsppsdqspps。在下面php应用中,我将详细展开学习反向引用。

  模式修饰符

  模式修饰符的作用是设定模式,也就是正则表达式如何解释。php中主要模式如下表:

修饰符说明
i忽略大小写
m多文本模式
s单行文本模式
x忽略空白字符

  正则表达式在php中应用

  php中字符串匹配

  所谓的字符串匹配,言外之意就是判断一个字符串中,是否包含或是等于另一个字符串。如果不使用正则,我们可以使用php中提供了很多方法进行这样的判断。

  不使用正则匹配

  strstr函数

  string strstr ( string haystack,mixedneedle [, bool $before_needle = false ])

  注1:haystack是当事字符串,needle是被查找的字符串。该函数区分大小写。

  注2:返回值是从needle开始到最后。

  注3:关于$needle,如果不是字符串,被当作整形来作为字符的序号来使用。

  注4:before_needle若为true,则返回前东西。

  stristr函数与strstr函数相同,只是它不区分大小写

  strpo函数

  int strpos ( string haystack,mixedneedle [, int $offset = 0 ] )

  注1:可选的 offset 参数可以用来指定从 haystack 中的哪一个字符开始查找。返回的数字位置是相对于 haystack 的起始位置而言的。

  stripos -查找字符串首次出现的位置(不区分大小定)

  strrpos -计算指定字符串在目标字符串中最后一次出现的位置

  strripos -计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)

  使用正则进行匹配

  在php中,提供了preg_math()和preg_match_all函数进行正则匹配。关于这两个函数原型如下:

  int preg_match|preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

  搜索subject与pattern给定的正则表达式的一个匹配.

  pattern:要搜索的模式,字符串类型。

  subject :输入字符串。

  matches:如果提供了参数matches,它将被填充为搜索结果。 matches[0]将包含完整模式匹配到的文本,matches[1]将包含第一个捕获子组匹配到的文本,以此类推。

  flags:flags可以被设置为以下标记值:PREG_OFFSET_CAPTURE 如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。 注意:这会改变填充到matches参数的数组,使其每个元素成为一个由 第0个元素是匹配到的字符串,第1个元素是该匹配字符串 在目标字符串subject中的偏移量。

  offset:通常,搜索从目标字符串的开始位置开始。可选参数 offset 用于 指定从目标字符串的某个未知开始搜索(单位是字节)。

  返回值:preg_match()返回 pattern 的匹配次数。 它的值将是0次(不匹配)或1次,因为 preg_match()在第一次匹配后 将会停止搜索。 preg_match_all()不同于此,它会一直搜索subject直到到达结尾。 如果发生错误 preg_match()返回 FALSE。

  实例

  实例1

  判断字符串”http://blog.csdn.net/hsd2012“中是否包含csdn?

  解法一(不使用正则):

  如果不适用正则,我们使用strstr或者strpos中任意一个都可以,在此,我将使用strstr函数,代码如下:

  $str='http://blog.csdn.net/hsd2012'

  function checkStr1($str,$str2)

  {

  return strstr1($str,$str2)?true:false;

  }

  echo checkStr($str,'csdn');

  解法二:使用正则

  因为我们只需要判断是否存在即可,所以选择preg_match。

  $str='http://blog.csdn.net/hsd2012'

  $pattern='/csdn/'

  function checkStr2($str,$str2)

  {

  return preg_match($str2,$str)?true:false;

  }

  echo checkStr2($str,$pattern);

  实例2(考察单词定界符)

  判断字符串”I am a good boy”中是否包含单词go

  首先判断是单词,而不是字符串,因此比较的时候,需要比较是否包含' go ‘,即在字符串go前后有一个空格。

  解析:如果使用非正则比较,只需要调用上面的checkStr1()函数即可,注意,第二个参数前后要加一个空格,即' go ‘。如果使用正则,

  我们可以考虑使用单词定界符\b,那么$pattern='/\bgo\b/'然后调用checkStr2函数即可.

  例3(考察反向引用)

  判断字符串”I am a good boy”中是否包含3个相同的字母

  解析:此时,如果我们不使用正则,将会很难判断,因为字母太多了,我们不可能去将所有字母分别与该字符串比较,那样工作量也比较大。这时候涉及到了正在的反向引用。在php正则表达式中,通过\n,来表示第n次匹配到的结果。如\5代表第五次匹配到的结果。那么本题的$pattern='/(\w).*\1.*\1/'

  主要注意的是,在使用反向匹配的时候都需要使用(),反向匹配时,匹配()里面出现的字符或字符串。

  php中字符串替换

  不使用正则

  php中当替换字符串的时候,如果不适用正则,我们通常使用substr、mb_substr、str_replace、substr_replace关于这几个函数区别如下表。

函数符功能描述
str_replace(find,replace,string,count)使用一个字符串替换字符串中的另一些字符。find 必需。规定要查找的值。replace 必需。规定替换 find 中的值的值。string 必需。规定被搜索的字符串。count 可选。一个变量,对替换数进行计数。
substr_replace(string,replacement,start,length)把字符串的一部分替换为另一个字符串。适合用于替换自定位置的字符串。string 必需。规定要检查的字符串。replacement 必需。规定要插入的字符串。start 必需。规定在字符串的何处开始替换。

  使用正则

  如果使用正则替换,php中提供了preg_replace _callback和preg_replace 函数,preg_replace 原型如下:

  mixed preg_replace ( mixed pattern,mixedreplacement , mixed subject[,intlimit = -1 [, int &count]])

  函数功能描述:在字符串subject中,查找pattern,然后使用replacement 去替换,如果有limit则代表限制替换limit次。pregreplacecallback与pregreplace功能相识,不同的是pregreplaceback使用一个回调函数callback来代替replacement.−例1将字符串”hello,中国”中的hello替换为′你好′;如果不是用正则:str='hello,中国'

  str=strreplace(′hello′,′你好′,str)

  或是使用

  str=substrreplace(str,'你好',0,5)

  使用正则

  pattern=′/hello/′;str=preg_replace (pattern,′你好′,str);

  - 例2

  去除字符串”gawwenngeeojjgegop”中连续相同的字母

  $str='gawwenngeeojjgegop'

  $pattern='/(.)\1/'

  $str=preg_replace($pattern,'',$str);

  解析:当然这样可能会遇到,当第一次去除了重复了字符串后,又出来重复的字符串。如字符串味'gewwenngeeojjgegop',针对这中问题,当然,这样的话,通过判断,继续替换下去。

  例3

  将字符串中”age13gegep3iorji65k65k”;中出现的连续两个数字改为第二个数字,如字符串中13被改为3

  $str='age13gegep3iorji65k65k'

  $pattern='/(\d)(\d)/'

  $str=preg_replace($pattern,'$2', $str);

  解析:$n在正则表达式外使用反向引用。n代表第几次匹配到的结果。

  php中字符串分割

  不使用正则

  php提供了explode函数去分割字符串,与其对应的是implode。关于explode原型如下:

  array explode ( string delimiter,stringstring [, int $limit ] )

  delimiter:边界上的分隔字符。

  string:输入的字符串。

  limit:如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。如果 limit 是 0,则会被当做 1。

  使用正则

  关于通过正则表达式进行字符串分割,php提供了split、preg_split 函数。preg_split() 函数,通常是比 split() 更快的替代方案。

  array preg_split ( string pattern,stringsubject [, int limit=−1[,intflags = 0 ]] )

  例题

  将字符串 ‘http://blog.csdn.net/hsd2012/article/details/51152810‘按照'/'进行分割

  解法一:

  $str='http://blog.csdn.net/hsd2012/article/details/51152810'

  $str=explode('/', $str);

  解法二:

  $str='http://blog.csdn.net/hsd2012/article/details/51152810'

  $pattern='/\//' /*因为/为特殊字符,需要转移*/

  $str=preg_split ($pattern, $str);

  php中贪婪匹配与惰性匹配

  贪婪匹配:就是匹配尽可能多的字符。

  比如,正则表达式中m.*n,它将匹配最长以m开始,n结尾的字符串。如果用它来搜索manmpndegenc的话,它将匹配到的字符串是manmpndegen而非man。可以这样想,当匹配到m的时候,它将从后面往前匹配字符n。

  懒惰匹配:就是匹配尽可能少的字符。

  有的时候,我们需要并不是去贪婪匹配,而是尽可能少的去匹配。这时候,就需要将其转为惰性匹配。怎样将一个贪婪匹配转为惰性匹配呢?只需要在其后面添加一个”?”即可。如m.*?n将匹配manmpndegenc,匹配到的字符串是man。

函数符描述
*?零次或多次,但尽可能少的匹配
+?一次或多次,但尽可能少的匹配
??0次或1次,但尽可能少的匹配
{n,}?至少n次,但尽可能少的匹配
{n,m}?n到m次 ,但尽可能少的匹配

  php正则表达式之回溯与固态分组

  回溯

  首先我们需要清楚什么是回溯,回溯就像是在走岔路口,当遇到岔路的时候就先在每个路口做一个标记。如果走了死路,就可以照原路返回,直到遇见之前所做过的标记,标记着还未尝试过的道路。如果那条路也走不能,可以继续返回,找到下一个标记,如此重复,直到找到出路,或者直到完成所有没有尝试过的路。首先我们看例题

  $str='aageacwgewcaw'

  $pattern='/a\w*c/i'

  $str=preg_match($pattern, $str);

  看到上面的程序,可能都清楚是什么意思,就是匹配$str是否包含这样一个由”a+0个或多个字母+c”不区分大小写的字符串。但是至于程序怎样去匹配的呢?匹配的过程中,回溯了多少次呢?

匹配过程接下来操作描述
‘a\w*c'中a匹配到'aageacwgewcaw'中第一个字符a\w进行下一个字符匹配
因为\w是贪婪匹配,会一直匹配到'aageacwgewcaw'中最后一个字符wc进行下一个字符匹配时
‘a\w*c'中c发现没有可以匹配的于是\w匹配进行第一次回溯,匹配到倒数第二个字符a
‘a\w*c'中c发现还是没有可以匹配的于是\w匹配进行第二次回溯,匹配到倒数第三个字符c
‘a\w*c'中c匹配成功匹配结束返回结果

  现在,如果我们将pattern改为pattern='/a\w*?c/i'又会回溯多少次呢?正确答案是回溯四次。

  固态分组

  固态分组,目的就是减少回溯次数, 使用(?>…)括号中的匹配时如果产生了备选状态,那么一旦离开括号便会被立即 引擎抛弃掉。举个典型的例子如: ‘\w+:'这个表达式在进行匹配时的流程是这样的,会优先去匹配所有的符合\w的字符,假如字符串的末尾没有':',即匹配没有找到冒号,此时触发回溯机制,他会迫使前面的\w+释放字符,并且在交还的字符中重新尝试与':'作比对。但是问题出现在这里: \w是不包含冒号的,显然无论如何都不会匹配成功,可是依照回溯机制,引擎还是得硬着头皮往前找,这就是对资源的浪费。所以我们就需要避免这种回溯,对此的方法就是将前面匹配到的内容固化,不令其存储备用状态!,那么引擎就会因为没有备用状态可用而只得结束匹配过程。大大减少回溯的次数。

  如下代码,就不会进行回溯:

  $str='nihaoaheloo'

  $pattern='/(?>\w+):/'

  $rs=preg_match($pattern, $str);

  当然有的时候,又需慎用固态分组,如下,我要检查$str中是否包含以a结尾的字符串,很明显是包含的,但是因为使用了固态分组,反而达不到我们想要的效果

  $str='nihaoahelaa'

  $pattern1='/(?>\w+)a/'

  $pattern2='/\w+a/'

  $rs=preg_match($pattern1, $str);//0

  $rs=preg_match($pattern2, $str);//1

  php中其他常用字符串操作函数

  字符串截取截取

  string substr ( string string,intstart [, int length])stringmbsubstr(stringstr , int start[,intlength = NULL [, string $encoding = mb_internal_encoding() ]] )

  字符串中大小写转换

  strtoupper

  strtolower

  ucfirst

  ucwords

  字符串比较

  -strcmp、strcasecmp、strnatcmp

  字符串过滤

  字符串翻转

  strrev($str);

  字符串随机排序

  string str_shuffle ( string $str )

  补充

  怎样进行邮箱匹配,url匹配,手机匹配

  使用preg_match函数进行匹配,以下内容从TP中复制而来。

  邮箱验证

  pattern=′/\w+([−+.]\w+)∗@\w+([−.]\w+)∗\.\w+([−.]\w+)∗/'

  url匹配

  pattern='/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(:\d+)?(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?/'

  手机验证

  pattern=′/1[3458]\d10/'

  php中正则的优缺点

  php中正则在某些时候,能帮我们解决php函数很多困难的匹配或是替换。然后php中正则的效率,往往是我们需要考虑的,所以在某些时候,能不用正则还是尽量不去用它,除非,某些场合必须用到,或是我们能够有效减少其回溯次数。

小编推荐的这篇文章介绍了PHP调试及性能分析工具Xdebug详解,非常实用,有兴趣的同学快来看看吧。

程序开发过程中,一般用得最多的调试方法就是用echo、print_r()、var_dump()、printf()等将语句打印出来。对PHP脚本的执行效率,通常是脚本执行时间。对数据库SQL的效率,通常是数据库Query时间,但这样并不能真正定位和分析脚本执行和数据库查询的瓶颈所在?对此,有一个叫Xdebug(www.xdebug.org)的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。

一、以windows平台对此模块的安装做简单的介绍:

1. 下载PHP的XDebug扩展,网址:http://xdebug.org/(这个根据你目前使用的PHP版本而定);

2. 将下载的模块(php_xdebug-2.0.5-5.2.dll)放到PHP的安装的 ext 目录下;

3. 配置php.ini文件,将以下几行添加

**************************************

extension=php_xdebug-2.0.5-5.2.dll
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir="E:/Projects/xdebug" #放置Xdebug输出的数据文件的目录
xdebug.profiler_output_dir="E:/Projects/xdebug"
********************************************************

4. 重启Apache服务器。完成!!!

5. 如果输出的内容中有看到xdebug,说明安装配置成功。

6. 在Windows平台下,可以用客户端(Windows):WinCacheGrind WinCacheGrind 这个软件来打开这些文件。可以更直观地显示其中内容:

二、以Linux平台作简单的介绍:

1. 在Linux下编译安装XDebug

[root@localhost src]# tar -xvf xdebug-2.0.5
[root@localhost xdebug-2.0.5]# /usr/local/php/bin/phpize
[root@localhost xdebug-2.0.5]# ./configure --enable-xdebug --with-php-config=/usr/locar/php/bin/php-config
[root@localhost xdebug-2.0.5]# make
可以将生成的 xdebug.so 拷贝到 extension_dir 所指向的路径目录。

2. 配置

vi /usr/local/php/lib/php.ini 修改php.ini,去除PHP加速模块,增加以下配置信息支持XDebug扩展
#extension=vld.so  //是输出OPCODES的模块
extension=xdebug.so
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir="/tmp/xdebug"
xdebug.profiler_output_dir="/tmp/xdebug"
xdebug.profile_output_name="script"

注:也可使用 [root@localhost xdebug-2.0.5]# /usr/local/php/bin/php -m 列出所有的扩展模块

3. 重启WEB服务器

[root@localhost xdebug-2.0.5]# service httpd restart      OK!!!

Xdebug工具会将跟踪的错误信息以日记的形式写入到输出的数据文件中,可以文件去查看,但为了更直观,还有一个图形界面的工具来分析跟踪的日记记录。WinCacheGrind   (wincachegrind.souceforge.net)此软件直接安装就行,从图形窗口中可以将整个程序的结构,每个函数被调用的次数,执行时间都一目了然。很专业很方便!!!

总结:Xdebug可以跟踪程序的运行,通过对日志文件的分析,我们可以迅速找到程序运行的瓶颈所在,提高程序效率,从而提高整个系统的性能。

php如何一键生成各种尺寸Icon?本文详细介绍了一键生成各种尺寸Icon的php脚本的实例代码,有需要的朋友请看下文。

 

 代码如下 复制代码

<?php

/**

* @name thumb  缩略图函数

* @param  sting  $img_name  图片路径

* @param  int   $max_width 略图最大宽度

* @param  int   $max_height 略图最大高度

* @param  sting  $suffix 略图后缀(如"img_x.jpg"代表小图,"img_m.jpg"代表中图,"img_l.jpg"代表大图)

* @return  void

*/

functionthumb($img_name,$max_width,$max_height,$path,$new_name)

{

  $img_infos=getimagesize($img_name);

  $img_height=$img_infos[0];//图片高

  $img_width=$img_infos[1];//图片宽

  $img_extension='';   //图片后缀名

  

  switch($img_infos[2])

  {

    case1:

      $img_extension='gif';

      break;

    case2:

      $img_extension='jpeg';

      break;

    case3:

      $img_extension='png';

      break;

    default:

      $img_extension='jpeg';

      break;

  }

  

  $new_img_size=array();

  $new_img_size['width'] =$max_width;

  $new_img_size['height'] =$max_height;

    

  $img_func='';  //函数名称

  $img_handle=''; //图片句柄

  $thum_handle='';//略图图片句柄

  

  switch($img_extension)

  {

    case'jpg':

      $img_handle= imagecreatefromjpeg($img_name);

      $img_func='imagejpeg';

      break;

    case'jpeg':

      $img_handle= imagecreatefromjpeg($img_name);

      $img_func='imagejpeg';

      break;

    case'png':

      $img_handle= imagecreatefrompng($img_name);

      imagesavealpha($img_handle, true);

      $img_func='imagepng';

      break;

    case'gif':

      $img_handle= imagecreatefromgif($img_name);

      $img_func='imagegif';

      break;

    default:

      $img_handle= imagecreatefromjpeg($img_name);

      $img_func='imagejpeg';

      break;

  }

  

  $quality= 100;//图片质量

  if($img_func=='imagepng')

  {

    $quality= 9;

  } 

  

  $thum_handle= imagecreatetruecolor($new_img_size['height'],$new_img_size['width']);

  imagealphablending($thum_handle,false);//这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;

  imagesavealpha($thum_handle,true);//这里很重要,意思是不要丢了$thumb图像的透明色;

  

  if(function_exists('imagecopyresampled'))

  {

    imagecopyresampled($thum_handle,$img_handle,  0, 0, 0,  0,$new_img_size['height'],$new_img_size['width'],$img_height,$img_width);

  } 

  else 

  {

    imagecopyresized($thum_handle,$img_handle,  0, 0, 0,  0,$new_img_size['height'],$new_img_size['width'],$img_height,$img_width);

  }

  

  call_user_func_array($img_func,array($thum_handle,$path.'/'.$new_name,$quality));

  imagedestroy($thum_handle);//清除句柄

  imagedestroy($img_handle);//清除句柄

}

  

  

$IconArray=array 

(

  "IOS8"=>array 

  (

    array("width"=> 180, "height"=> 180,"path"=>"ios8",  "name"=>"Icon-180.png"),

    array("width"=> 120, "height"=> 120,"path"=>"ios8",  "name"=>"Icon-120.png"),

    array("width"=> 152, "height"=> 152,"path"=>"ios8",  "name"=>"Icon-152.png"),

    array("width"=> 76,  "height"=> 76,   "path"=>"ios8",  "name"=>"Icon-76.png"), 

    array("width"=> 144, "height"=> 144,"path"=>"ios8",  "name"=>"Icon-144.png"),

    array("width"=> 72,  "height"=> 72,   "path"=>"ios8",  "name"=>"Icon-72.png"),

    array("width"=> 114, "height"=> 114,"path"=>"ios8",  "name"=>"Icon-114.png"),

    array("width"=> 57,  "height"=> 57,   "path"=>"ios8",  "name"=>"Icon-57.png"), 

    array("width"=> 100, "height"=> 100,"path"=>"ios8",  "name"=>"Icon-100.png"),

    array("width"=> 50,  "height"=> 50,   "path"=>"ios8",  "name"=>"Icon-50.png"), 

    array("width"=> 80,  "height"=> 80,   "path"=>"ios8",  "name"=>"Icon-80.png"),

    array("width"=> 40,  "height"=> 40,   "path"=>"ios8",  "name"=>"Icon-40.png"),

    array("width"=> 58,  "height"=> 58,   "path"=>"ios8",  "name"=>"Icon-58.png"),

    array("width"=> 29,  "height"=> 29,   "path"=>"ios8",  "name"=>"Icon-29.png"),

  ),

  "IOS"=>array 

  (

    array("width"=> 180, "height"=> 180,"path"=>"ios",   "name"=>"Icon-60@3x.png"),

    array("width"=> 120, "height"=> 120,"path"=>"ios",   "name"=>"Icon-60@2x.png"),

    array("width"=> 152, "height"=> 152,"path"=>"ios",   "name"=>"Icon-76@2x.png"),

    array("width"=> 76,  "height"=> 76,   "path"=>"ios",   "name"=>"Icon-76.png"), 

    array("width"=> 144, "height"=> 144,"path"=>"ios",   "name"=>"Icon-72@2x.png"),

    array("width"=> 72,  "height"=> 72,   "path"=>"ios",   "name"=>"Icon-72.png"),

    array("width"=> 114, "height"=> 114,"path"=>"ios",   "name"=>"Icon-57@2x.png"),

    array("width"=> 57,  "height"=> 57,   "path"=>"ios",   "name"=>"Icon-57.png"), 

    array("width"=> 100, "height"=> 100,"path"=>"ios",   "name"=>"Icon-50@2x.png"),

    array("width"=> 50,  "height"=> 50,   "path"=>"ios",   "name"=>"Icon-50.png"), 

    array("width"=> 80,  "height"=> 80,   "path"=>"ios",   "name"=>"Icon-40@2x.png"),

    array("width"=> 40,  "height"=> 40,   "path"=>"ios",   "name"=>"Icon-40.png"),

    array("width"=> 58,  "height"=> 58,   "path"=>"ios",   "name"=>"Icon-29@2x.png"),

    array("width"=> 29,  "height"=> 29,   "path"=>"ios",   "name"=>"Icon-29.png"),

  )

  ,

  "ANDROID"=>array

  (

    array("width"=> 144, "height"=> 144,  "path"=>"android/drawable",     "name"=>"icon.png"),

    array("width"=> 144, "height"=> 144,  "path"=>"android/drawable-xhdpi","name"=>"icon.png"),

    array("width"=> 72,  "height"=> 72,"path"=>"android/drawable-hdpi",   "name"=>"icon.png"),

    array("width"=> 48,  "height"=> 48,"path"=>"android/drawable-mdpi",   "name"=>"icon.png"),

    array("width"=> 32,  "height"=> 32,"path"=>"android/drawable-ldpi",   "name"=>"icon.png")

  )

);

  

  

foreach($IconArray["IOS8"]as$key=>$IconType) 

{

  thumb("icon.png",$IconType['width'],$IconType['height'],$IconType['path'],$IconType['name']);

}

  

foreach($IconArray["IOS"]as$key=>$IconType) 

{

  thumb("icon.png",$IconType['width'],$IconType['height'],$IconType['path'],$IconType['name']);

}

  

foreach($IconArray["ANDROID"]as$key=>$IconType) 

{

  thumb("icon.png",$IconType['width'],$IconType['height'],$IconType['path'],$IconType['name']);

}

  

?>

 

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • 删除条目时弹出的确认对话框

    复制代码 代码如下: <td> <a href="/member/life/edit_ppt/<?php echo $v->id;?>" class="btn">编辑</a> <a href="javascript:;" onclick="if(confirm('您确定删除这条记录?')){location.href='/member/life/d...2014-06-07
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04