PHP反转字符串函数strrev()函数的用法
Php/Js/Shell/Go jackxiang 2012-8-12 11:14
定义和用法
strrev() 函数反转字符串。
语法
strrev(string)
参数 描述
string 必需。规定要反转的字符串。
例子
复制代码 代码如下:
输出:
!dlroW olleH
Shell 也有对应的一个函数:
strrev() 函数反转字符串。
语法
strrev(string)
参数 描述
string 必需。规定要反转的字符串。
例子
复制代码 代码如下:
输出:
!dlroW olleH
Shell 也有对应的一个函数:
[实践OK]传说中的冒泡排序法在PHP中实现及排序原理描述。
Php/Js/Shell/Go jackxiang 2012-8-10 23:42
背景:在很多PHP面试上会给一些冒泡排序、或不说是冒泡排序,而说是自己实现一个按顺序排序,其实更高效呢需要更多时间写代码及思考,往往冒泡排序是最容易考察一个人对php也好,c的指针也好的一个驾驭以能力。
经典的冒泡排序法一直是许多程序沿用的其中一种排序法,话说冒泡排序法在效率上比PHP系统函数sort更高效。本章不讨论性能,所以就不拿它来跟系统性能做对比了。
我写了一个,其原理,就是无论给一个什么样的数组,其输入这个排序函数,就给按数组下标小的值小在前面,而大的给放后面,也就是相当于一个瓶子里的气泡,轻的下沉,重的上浮,这个用语言讲出来还真不太好讲:
1)对于由a[0],a[1],a[2],a[3]....a[n-2],a[n-1],n个数组,通整个数组进行扫描(挨个扫:下标:0,1一组,1,2一组...,一组发现数组下标小的值且大的则交换),一直这样交换下去会发现:
(1)最大的那个经过一次扫描就沉到最下面了。
(2)最下面那个下一次不用再扫一次了,省一次比对。
(3)根据2,对上面操作再扫一次,则这个倒数第二重的那个气泡也就排好了。
....依次类推,直至最上面两个数是最后一次,也就全排好了。(这个就是外层的一个:i最大,i--,因为内层一次后,最大那个已经到最下面了,于是,i--也就不用再扫它了)
12,45,28,30,88,67
第一次:12,28,30,45,67,88 //左右相邻比对,小下标大数值的往后挪
第二次:12,28,30,45,67,88 //这个其实一次就排好了,有些不规则的不止一次
.....
第N-1次 也就到了0,1两个下标的比对调整下位置,也就算排完了这个冒泡,确保正确。
---------- 调试PHP ----------
冒泡排序学习之PHP版本:Array
(
[0] => 12
[1] => 45
[2] => 28
[3] => 30
[4] => 88
[5] => 67
)
HeloArray
(
[0] => 12
[1] => 28
[2] => 30
[3] => 45
[4] => 67
[5] => 88
)
Output completed (0 sec consumed) - Normal Termination
下面这个是他人写的,感觉是反向,还不是太好理解,姑且放这儿吧:
冒泡排序大概的意思是依次比较相邻的两个数,然后根据大小做出排序,直至最后两位数。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。但其实在实际过程中也可以根据自己需要反过来用,大树往前放,小数往后放。阅读全文
经典的冒泡排序法一直是许多程序沿用的其中一种排序法,话说冒泡排序法在效率上比PHP系统函数sort更高效。本章不讨论性能,所以就不拿它来跟系统性能做对比了。
我写了一个,其原理,就是无论给一个什么样的数组,其输入这个排序函数,就给按数组下标小的值小在前面,而大的给放后面,也就是相当于一个瓶子里的气泡,轻的下沉,重的上浮,这个用语言讲出来还真不太好讲:
1)对于由a[0],a[1],a[2],a[3]....a[n-2],a[n-1],n个数组,通整个数组进行扫描(挨个扫:下标:0,1一组,1,2一组...,一组发现数组下标小的值且大的则交换),一直这样交换下去会发现:
(1)最大的那个经过一次扫描就沉到最下面了。
(2)最下面那个下一次不用再扫一次了,省一次比对。
(3)根据2,对上面操作再扫一次,则这个倒数第二重的那个气泡也就排好了。
....依次类推,直至最上面两个数是最后一次,也就全排好了。(这个就是外层的一个:i最大,i--,因为内层一次后,最大那个已经到最下面了,于是,i--也就不用再扫它了)
12,45,28,30,88,67
第一次:12,28,30,45,67,88 //左右相邻比对,小下标大数值的往后挪
第二次:12,28,30,45,67,88 //这个其实一次就排好了,有些不规则的不止一次
.....
第N-1次 也就到了0,1两个下标的比对调整下位置,也就算排完了这个冒泡,确保正确。
---------- 调试PHP ----------
冒泡排序学习之PHP版本:Array
(
[0] => 12
[1] => 45
[2] => 28
[3] => 30
[4] => 88
[5] => 67
)
HeloArray
(
[0] => 12
[1] => 28
[2] => 30
[3] => 45
[4] => 67
[5] => 88
)
Output completed (0 sec consumed) - Normal Termination
下面这个是他人写的,感觉是反向,还不是太好理解,姑且放这儿吧:
冒泡排序大概的意思是依次比较相邻的两个数,然后根据大小做出排序,直至最后两位数。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。但其实在实际过程中也可以根据自己需要反过来用,大树往前放,小数往后放。阅读全文
如果我们想知道某个方法被谁调用了? debug_print_backtrace可以解决
debug_print_backtrace() 可以打印出一个页面的调用过程 , 从哪儿来到哪儿去一目了然.
不过这是一个PHP5的专有函数,好在pear中已经有了实现,
PHP debug_backtrace() 函数生成一个 backtrace。
该函数返回一个关联数组。下面是可能返回的元素:
名称 类型 描述
function 字符串 当前的函数名。
line 整数 当前的行号。
file 字符串 当前的文件名。
class 字符串 当前的类名
object 对象 当前对象。
type 字符串 当前的调用类型,可能的调用:
返回: "->" - 方法调用
返回: "::" - 静态方法调用
返回 nothing - 函数调用
args 数组 如果在函数中,列出函数参数。如果在被引用的文件中,列出被引用的文件名。
阅读全文
debug_print_backtrace() 可以打印出一个页面的调用过程 , 从哪儿来到哪儿去一目了然.
不过这是一个PHP5的专有函数,好在pear中已经有了实现,
PHP debug_backtrace() 函数生成一个 backtrace。
该函数返回一个关联数组。下面是可能返回的元素:
名称 类型 描述
function 字符串 当前的函数名。
line 整数 当前的行号。
file 字符串 当前的文件名。
class 字符串 当前的类名
object 对象 当前对象。
type 字符串 当前的调用类型,可能的调用:
返回: "->" - 方法调用
返回: "::" - 静态方法调用
返回 nothing - 函数调用
args 数组 如果在函数中,列出函数参数。如果在被引用的文件中,列出被引用的文件名。
阅读全文
PHP对论坛帖子的过滤之海量关键字的过滤算法
Php/Js/Shell/Go jackxiang 2012-8-8 09:40
初略:
array(将=>array(军,来=>array(要=>array(升=>array(级)))),美=>array(人=>array(上,痣),女=>array(陪,聊)))
这种方式可能会高一点,但不利于海量,下面有一个思路,可以参考下。
关键词过滤的程序:
因为关键词比较多,用preg_replace效率极差,str_replace又不能有太多的关键词,strtr虽然效率比str_replace快四倍,但用于大数组效率却和str_replace比较接近,于是自己用PHP写了一个算法,觉得效率非常很不错,遂于大家分享,待程序完善后便贴出来,先占个位置
主要是思路,
对文章按字节进行遍历,然后对每个字节开始的位置进行递归匹配关键词(当然不是直接去匹配,这里做了一个技巧,是把关键词按字节的ACCSII码做为KEY分成N维数组),这样只遍历文章一次便定位出所有关键字的位置,递归部分不会减慢程序的速度,一般第一次就会被跳出,这样程序不会随关键字的数量而变慢,理论上几十万关键字和几千个个关键字速度差不多 在本机测试了下4万个关键词,替换一篇文章竟然才用0.01秒多,而str_replace 已经到了 0.4秒了,并且关键词数量越多 str_replace 时间越长。
DownLoad:
keyword.class.php 是类
example.php 是例子 和 与 str_replace的对比
badword.src.php 是关键词的文件
也可以参看:http://hi.baidu.com/actfish/item/7fc13be2431a9018585dd837
关于关键字过滤程序中发现的多层循环的改良技巧:
for循环的嵌套是很悲观的一件事情,多层嵌套时不出错的概率基本上是0(除非你的嵌套非常简单),当你的程序里充满了return,break时,是否头疼了呢?这时候我们常常忽略了C#语言的一个重要关键字“GOTO”。大胆尝试一下吧,虽然平时不鼓励使用GOTO来进行编程的,但有时候,使用它会大大提高你的效率,多层复杂循环就是“有时候”的一个时候。
array(将=>array(军,来=>array(要=>array(升=>array(级)))),美=>array(人=>array(上,痣),女=>array(陪,聊)))
这种方式可能会高一点,但不利于海量,下面有一个思路,可以参考下。
关键词过滤的程序:
因为关键词比较多,用preg_replace效率极差,str_replace又不能有太多的关键词,strtr虽然效率比str_replace快四倍,但用于大数组效率却和str_replace比较接近,于是自己用PHP写了一个算法,觉得效率非常很不错,遂于大家分享,待程序完善后便贴出来,先占个位置
主要是思路,
对文章按字节进行遍历,然后对每个字节开始的位置进行递归匹配关键词(当然不是直接去匹配,这里做了一个技巧,是把关键词按字节的ACCSII码做为KEY分成N维数组),这样只遍历文章一次便定位出所有关键字的位置,递归部分不会减慢程序的速度,一般第一次就会被跳出,这样程序不会随关键字的数量而变慢,理论上几十万关键字和几千个个关键字速度差不多 在本机测试了下4万个关键词,替换一篇文章竟然才用0.01秒多,而str_replace 已经到了 0.4秒了,并且关键词数量越多 str_replace 时间越长。
DownLoad:
下载文件
keyword.class.php 是类
example.php 是例子 和 与 str_replace的对比
badword.src.php 是关键词的文件
也可以参看:http://hi.baidu.com/actfish/item/7fc13be2431a9018585dd837
关于关键字过滤程序中发现的多层循环的改良技巧:
for循环的嵌套是很悲观的一件事情,多层嵌套时不出错的概率基本上是0(除非你的嵌套非常简单),当你的程序里充满了return,break时,是否头疼了呢?这时候我们常常忽略了C#语言的一个重要关键字“GOTO”。大胆尝试一下吧,虽然平时不鼓励使用GOTO来进行编程的,但有时候,使用它会大大提高你的效率,多层复杂循环就是“有时候”的一个时候。
用python爬虫抓站的一些技巧总结
Php/Js/Shell/Go jackxiang 2012-8-7 14:36
[实践Ok]php addslashes对Post多维数组过渡处理$_POST 数组替代magic_quotes_gpc=on
Php/Js/Shell/Go jackxiang 2012-7-31 17:20
php -i|grep magic_quotes_gpc
magic_quotes_gpc => Off => Off
注释:默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
php addslashes处理$_POST $_GET数组函数:
调用:
magic_quotes_gpc => Off => Off
注释:默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
php addslashes处理$_POST $_GET数组函数:
调用:
[实践Ok]Smarty截取中文乱码问题解决办法
Php/Js/Shell/Go jackxiang 2012-7-31 09:51
背景:因smarty原自带函数截取时会出现中文乱码(我的是GBK的编码),出现怪异符号。
目的:修改Smarty的变量调节器truncate无乱码截取中文。
正题:
网站的页面在展现时,为了美观,经常需要对一些标题的长度进行控制。在整个程序中,到处都是那忙碌的字符串截取函数,而且还可能出现中文乱码。用mb_substr()可以比较好的截取中文,但是它把中文和英文都按一个字符处理,截取的效果感觉不是太好。
如果你是用Smarty做表现层的话,可以用smarty的变量调节器truncate方法来控制字符串的长度,当然利用Smarty自己的truncate截取中文时,会出现乱码。我们可以改写它的truncate调节器,让它来帮我们截取字符串,达到一劳永逸的效果。
找到你的Smarty安装目录,打开plugins/modifier.truncate.php文件。你可以用下面的函数替换掉smarty自己的函数。
参数$length:为截取字符串的最大长度,默认为80字符,一个中文按2个字符计算;$etc:截取字符串时,自动附加在后面的符号。默认为 (...);$break_words 本指为是否可以打断一个单词,在中文环境下,作用不大,在改写的方法中,后面两个参数不起什么作用。
最后说下使用,{$title|truncate:30:"..."} ,很简单不是?当然这30个字符的长度还包括(...),如果你不喜欢,可以自己修改上面代码中的一行。
目的:修改Smarty的变量调节器truncate无乱码截取中文。
正题:
网站的页面在展现时,为了美观,经常需要对一些标题的长度进行控制。在整个程序中,到处都是那忙碌的字符串截取函数,而且还可能出现中文乱码。用mb_substr()可以比较好的截取中文,但是它把中文和英文都按一个字符处理,截取的效果感觉不是太好。
如果你是用Smarty做表现层的话,可以用smarty的变量调节器truncate方法来控制字符串的长度,当然利用Smarty自己的truncate截取中文时,会出现乱码。我们可以改写它的truncate调节器,让它来帮我们截取字符串,达到一劳永逸的效果。
找到你的Smarty安装目录,打开plugins/modifier.truncate.php文件。你可以用下面的函数替换掉smarty自己的函数。
参数$length:为截取字符串的最大长度,默认为80字符,一个中文按2个字符计算;$etc:截取字符串时,自动附加在后面的符号。默认为 (...);$break_words 本指为是否可以打断一个单词,在中文环境下,作用不大,在改写的方法中,后面两个参数不起什么作用。
最后说下使用,{$title|truncate:30:"..."} ,很简单不是?当然这30个字符的长度还包括(...),如果你不喜欢,可以自己修改上面代码中的一行。
[实践OK]用shell实现带日期的文件名备份及文件名后缀及文件名,shell 去掉文件名后缀的简单方法及shell调试的常用参数,提取文件名。
Php/Js/Shell/Go jackxiang 2012-7-26 15:52
echo -n `date +%Y%m%d%H%M%S`| pbcopy
20220805095854
shell如下:
cat /data/www/up.jackxiang.com/bak.sh
为何要这么干的需求来源@[实践OK]CentOS下sendfile直接下载文件结合PHP的配置,curl -T 上传后下载高效实现方法。
:https://jackxiang.com/post/10785/
1206分论坛三预排座次表?打印80份?.pdf
在文件后缀前加上一个日期:
1)shell 去掉文件名后缀的简单方法:
2)shell调试的常用参数:
提取文件名:
${var##*/}
echo $rpm
/root/rpmbuild/RPMS/x86_64/xlswriter-php73-1.3.6-200925115211.el7.centos.x86_64.rpm
echo ${rpm##*/}
xlswriter-php73-1.3.6-200925115211.el7.centos.x86_64.rpm
提取文件后缀:
echo ${rpm##*.}
rpm
提取文件的多个后缀:
echo ${rpm#*.}
3.6-200925115211.el7.centos.x86_64.rpm
提取文件所在目录:
echo ${rpm%/*}
/root/rpmbuild/RPMS/x86_64
右边算起的最后一个'.'字符及其右边的内容
echo ${rpm%%.*}
/root/rpmbuild/RPMS/x86_64/xlswriter-php73-1
${}总结
其实${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的'/'或'.'。也就是说,上面的使用方法只是它使用的一个特例。
看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。
#:表示从左边算起第一个
%:表示从右边算起第一个
##:表示从左边算起最后一个
%%:表示从右边算起最后一个
换句话来说,#总是表示左边算起,%总是表示右边算起。
*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。
例如:${var%%x*}表示找出从右边算起最后一个字符x,并删除字符x及其右边的字符。
看到这里,就可以知道,其实该命令的用途非常广泛,上面只是指针文件名和目录名的命名特性来进行提取的一些特例而已。
更多摘录:
阅读全文
20220805095854
shell如下:
cat /data/www/up.jackxiang.com/bak.sh
为何要这么干的需求来源@[实践OK]CentOS下sendfile直接下载文件结合PHP的配置,curl -T 上传后下载高效实现方法。
:https://jackxiang.com/post/10785/
1206分论坛三预排座次表?打印80份?.pdf
在文件后缀前加上一个日期:
1)shell 去掉文件名后缀的简单方法:
2)shell调试的常用参数:
提取文件名:
${var##*/}
echo $rpm
/root/rpmbuild/RPMS/x86_64/xlswriter-php73-1.3.6-200925115211.el7.centos.x86_64.rpm
echo ${rpm##*/}
xlswriter-php73-1.3.6-200925115211.el7.centos.x86_64.rpm
提取文件后缀:
echo ${rpm##*.}
rpm
提取文件的多个后缀:
echo ${rpm#*.}
3.6-200925115211.el7.centos.x86_64.rpm
提取文件所在目录:
echo ${rpm%/*}
/root/rpmbuild/RPMS/x86_64
右边算起的最后一个'.'字符及其右边的内容
echo ${rpm%%.*}
/root/rpmbuild/RPMS/x86_64/xlswriter-php73-1
${}总结
其实${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的'/'或'.'。也就是说,上面的使用方法只是它使用的一个特例。
看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。
#:表示从左边算起第一个
%:表示从右边算起第一个
##:表示从左边算起最后一个
%%:表示从右边算起最后一个
换句话来说,#总是表示左边算起,%总是表示右边算起。
*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。
例如:${var%%x*}表示找出从右边算起最后一个字符x,并删除字符x及其右边的字符。
看到这里,就可以知道,其实该命令的用途非常广泛,上面只是指针文件名和目录名的命名特性来进行提取的一些特例而已。
更多摘录:
阅读全文
http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html
1)shell 分割字符串存至数组
上述代码会输出
one
two
three
four
arr=($a)用于将字符串$a分割到数组$arr ${arr[0]} ${arr[1]} ... 分别存储分割后的数组第1 2 ... 项 ,${arr[@]}存储整个数组。变量$IFS存储着分隔符,这里我们将其设为分号 "," OLD_IFS用于备份默认的分隔符,使用完后将之恢复默认。
2)shell查找某个字符串是否存在的方法:
存在ok值为1,不存在则为0.
${desturlLoopPath}
Shell获取字符串的MD5:
echo -n 'hello'|md5sum|cut -d ' ' -f1
命令解释:
md5sum: 显示或检查 MD5(128-bit) 校验和,若没有文件选项,或者文件处为"-",则从标准输入读取。
echo -n : 不打印换行符。
cut: cut用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。
-d 指定与空格和tab键不同的域分隔符。-f1 表示第一个域。参考这里。
1)shell 分割字符串存至数组
上述代码会输出
one
two
three
four
arr=($a)用于将字符串$a分割到数组$arr ${arr[0]} ${arr[1]} ... 分别存储分割后的数组第1 2 ... 项 ,${arr[@]}存储整个数组。变量$IFS存储着分隔符,这里我们将其设为分号 "," OLD_IFS用于备份默认的分隔符,使用完后将之恢复默认。
2)shell查找某个字符串是否存在的方法:
存在ok值为1,不存在则为0.
${desturlLoopPath}
Shell获取字符串的MD5:
echo -n 'hello'|md5sum|cut -d ' ' -f1
命令解释:
md5sum: 显示或检查 MD5(128-bit) 校验和,若没有文件选项,或者文件处为"-",则从标准输入读取。
echo -n : 不打印换行符。
cut: cut用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。
-d 指定与空格和tab键不同的域分隔符。-f1 表示第一个域。参考这里。
if [ $? -ne 0 ];then 是什么意思
Php/Js/Shell/Go jackxiang 2012-7-24 19:35
这是unix的shell编程语句,意思是如果上一条命令执行后的结束代码不是0则执行下面的命令,知道fi行之前,例子:
[实践Ok]html下拉单选变多选通过Jquery修改由单选变为多选的属性的方案。及jquery 如何修改<a>标签的内容,及根据值判断select控件是否disabled。
Php/Js/Shell/Go jackxiang 2012-7-23 11:06
(一)
需要修改的属性:
multiple="multiple" height:auto;
修改后如下:
<select style="height:auto;width:260px;" id="sel-install-path" multiple="multiple" >
一:
<select name="select" size="1" multiple="multiple" id="select">
我想给一个常规的select加上: multiple="multiple" Jquery怎么加?
二:
那个height呢?
<select style="height:auto;width:260px;" id="sel-install-path" multiple="multiple" >
开始是一个固定高度,我想修改为auto,怎么弄?
"height:auto;
<select style="height:auto;width:260px;" id="sel-install-path" multiple="multiple" >
方法:
如果想删除这个多选的属性:
如何获取这个多选是不是真的多选?
判断时的Js:
multiple换成disabled:
对这个多选的Js的Jquery的操作示例:
返回:
[ "/tmp/projectOne", "/tmp/projectTwo"]
(二)jquery 如何修改<a>标签的内容
<a href="javascript:void(0);" onClick="mutiPathBuShuChoose();" id="mutiPathBuShuChooseHref">多目标</a>
$("a#mutiPathBuShuChooseHref").html("单目标");
整体示例:
需要修改的属性:
multiple="multiple" height:auto;
修改后如下:
<select style="height:auto;width:260px;" id="sel-install-path" multiple="multiple" >
一:
<select name="select" size="1" multiple="multiple" id="select">
我想给一个常规的select加上: multiple="multiple" Jquery怎么加?
二:
那个height呢?
<select style="height:auto;width:260px;" id="sel-install-path" multiple="multiple" >
开始是一个固定高度,我想修改为auto,怎么弄?
"height:auto;
<select style="height:auto;width:260px;" id="sel-install-path" multiple="multiple" >
方法:
如果想删除这个多选的属性:
如何获取这个多选是不是真的多选?
判断时的Js:
multiple换成disabled:
对这个多选的Js的Jquery的操作示例:
返回:
[ "/tmp/projectOne", "/tmp/projectTwo"]
(二)jquery 如何修改<a>标签的内容
<a href="javascript:void(0);" onClick="mutiPathBuShuChoose();" id="mutiPathBuShuChooseHref">多目标</a>
$("a#mutiPathBuShuChooseHref").html("单目标");
整体示例:
用JavaScript获取ckeditor的内容
Php/Js/Shell/Go jackxiang 2012-7-19 17:07
Html:
editor是全局:
editor是全局: