php substr()函数实现过滤尾数为4号码

 更新时间:2016年11月25日 17:39  点击:1281
今天一个客户要批量生成400电话,起始位置是10000号,开始我直接生成就出现了如10004的号码但是商人都不喜欢这个数字,所在说过滤尾数是4的数字,我想一下利用substr($str,-1)==4就可以实现了,下面看代码。
 代码如下 复制代码
include("cn.php"); //数据库连接类,这里不说了自己去找找吧。
$Db = new Db();
$sql ="select * from 表名 where isnew=1";
$query = $Db->query( $sql );
$rs = $Db->fetch( $query ,0);
$i=10000;
foreach( $rs as $v => $vv )
{
 if( substr($i,-1)==4 )
 {
  $i++;
 }
 $sql ="update 表名 set txtiphone= '$i' where id=".$vv['id'];
 if( $Db->query( $sql ) )
 {
  $i++;
 }
}
echo '批量更新完成';

关于substr()函数

语法

substr(string,start,length)

参数 描述
string 必需。规定要返回其中一部分的字符串。
start

必需。规定在字符串的何处开始。

  • 正数 - 在字符串的指定位置开始
  • 负数 - 在从字符串结尾的指定位置开始
  • 0 - 在字符串中的第一个字符处开始
length

可选。规定要返回的字符串长度。默认是直到字符串的结尾。

  • 正数 - 从 start 参数所在的位置返回
  • 负数 - 从字符串末端返回

 

本站原创教程转载注明来源: http://www.111cn.net/phper/php.html   

我们介绍关于php中数组的操作,删除数组中指定值或判断数组中是否有值或清除空值操作,有需要的同学可以参考一下。

首先我们来看看关于php如何操作数组中的空值的多种方法

implode(); 此函数可参考http://www.111cn.net/phper/29/2dc95be9381b4bb1753083c09fda1a36.htm
用implode()将数组输出为字符串,判断输出的字串是否为空。初看上去似乎是个不错的方法,可惜跟上一点一样,对于二维以上数组就不行了。举个例子:

 代码如下 复制代码

$arr= array(array(),array(),array());
$str = implode(',',$arr);

if(empty($str)) echo "空";
else echo "非空";

很明显$arr是个含有三个空数组的二维数组,应该也算是空的,可是输出的确是非空。判断失败。
三、count(); 可参考http://www.111cn.net/w3school/php/func_array_count.htm

 代码如下 复制代码

$arr= array("","","");
echo count($arr);

四、in_array('', $arr)); 函数用法可参考http://www.111cn.net/phper/24/c5b81a8af14b1c0928eea343f59b454a.htm

 代码如下 复制代码
$arr= array("d","s","");
echo in_array('', $arr);

这个只能说明数组中有空的元素,不能证明数组是空的。很明显也不行。
五、empty(); 函数用法可参考http://www.111cn.net/so/php+empty()
这个cpyeh觉得跟前面几种方法差不多

 代码如下 复制代码

$arr= array("","","");
if(empty($arr)) echo "空";
else echo "非空";

结果还是非空
六、用strlen(),没内容的话好象长度都为1

结合上面实例我们写一个完整的删除数组空值的元素

 代码如下 复制代码

function array_remove_key($array, $keys)
{
$num = count($keys);
$num_last = $num - 1;
$this_array_0 = &$array;
$last_key = $keys[$num_last];
for ($i = 0; $i < $num_last; $i++)
{
$this_key = $keys[$i];
$this_var_name = 'this_array_' . $i;
$next_var_name = 'this_array_' . ($i + 1);
if (!array_key_exists($this_key, $$this_var_name)) {
break;
}
$$next_var_name = &${$this_var_name}[$this_key];
}
unset(${$next_var_name}[$last_key]);
return $array;
}

文章利用了大量的实现来介绍关于 单引号和双引号的用法与区别,有需要了解的同学可以仔细的参考一下本文章哦。

在PHP中,通常一个字符串被定义在一对引号中

按照下面的方法操作:

 代码如下 复制代码

$out = str_replace(array('rn', 'r', 'n'), '', $out);PHP 提供三种定义字符串的方法:单引号、双引号、本地文档(英文叫做 here document 或者 heredoc)。

单引号:
使用单引号是最高效的方法,因为 PHP 不会检查单引号字符串中的内置变量和转义序列,需要转义的字符只有反斜杠和单引号本身。

双引号:
会检查内置变量和转义序列,但不能识别转义的单引号。这也正说明了开始那段代码的错误之处,正确的做法是使用双引号来定义换行的转义序列:

 代码如下 复制代码
$out = str_replace(array("rn", "r", "n"), '', $out);

本地文档:
检查所有的内置变量和转义序列,双引号无需转义。例如:

 代码如下 复制代码
echo <<<EOT
this is a "here document" example.
just for test.

EOT;简单记录下,加深印象。

,如:

 代码如下 复制代码

'I am a string in single quotes'
"I am a string in double quotes"

  PHP语法分析器是用成对的引号来判断一个字符串的。因此,所有字符串必须使用同一种单或者双
引号来定义开始和结束。例如,下面的字串定义是不合法的:

 

 代码如下 复制代码

 

"I am not a valid string since I have unmatching quote marks'
'Me neither!"

  定义字符串时,只有一种引号被视为定义符,即单引号或双引号。于是,如果一个字符串由双引
号开始,那么只有双引号被分析器解析。这样,你就可以在双引号串中包含任何其他字符,甚至单引
号。下面的引号串都是合法的:

 代码如下 复制代码

$s = "I am a 'single quote string' inside a double quote string";
$s = 'I am a "double quote string" inside a single quote string';

  当PHP遇到与串的开头相对应的引号时,便认为已经到了字符串尾部,于是:

"Why doesn't "this" work?"

  实际上被PHP语法分析器分成三个部分:

"Why doesn't "——包含一个单引号的双引号串
this——多余的字符,分析器无法处理
" work?" ——普通字符串

  上面的这个例子企图在双引号串中包含双引号,而分析器在遇到第二个双引号时便认为字符串结
束了。要达到包含引号的目的,必须分析器在遇到串内普通引号的时候忽略它的原意,我们在引号的
前面加上一个反斜杠来告诉PHP:这个引号是字符串的一部分,正确的表示方法是这样:

 代码如下 复制代码

"Why doesn't "that" work?"

  在英文字符串中一个常见的问题是撇号'的使用,因为它就是一个单引号,而在英文串中十分常见
(英文所有格)。你必须小心处理这些字符:

 代码如下 复制代码

'You'd better escape your apostrophes'

  可以看到反斜杠在字符串中有他的特殊含义,当我们需要在字符串中包含反斜杠本身时,需要在
该符号前面多加一个反斜杠。例如:

 代码如下 复制代码

$file = "c:windowssystem.ini";
echo $file; // 打印结果为: c:windowssystem.ini
$file = "c:\windows\system.ini";
echo $file; // 打印结果为: c:windowssystem.ini

  另一种字符串定义方式,能够消除特殊字符的烦恼,而且便于引用较长的文本。该字符串定义方
法以<<<符号紧跟一个自定义字符串开头,最后一行以该自定义字符串结束,并且必须顶格。


二、字串的连接

  字串可以使用字串连接符(.)来连接,如:

 代码如下 复制代码

$first_name = 'Charlie';
$last_name = 'Brown';
$full_name = $first_name . ' ' . $last_name;

  常见的用途是建立大块的HTML字串代码,赋值号 (=) 连接符 (.) 可以被简写合并为 (.=) 符
号,如:

 代码如下 复制代码

$html = '<table>';
$html .= '<tr><td>number</td><td>square</td></tr>';
for ( $i=0 ; $i<10 ; $i++) {
$square = $i * $i;
$html .= '<tr><td>' . $i . '</td><td>' . $square . '</td></tr>';
}
$html .= '</table>';


三、在字串中使用变量

  这个功能让你无须使用连接符号来粘和大量的简单字符串。PHP允许我们在双引号串中直接包含字
串变量,我们可以发现下面的两个字串的处理结果是相同的。

 代码如下 复制代码

$full_name = $first_name . ' ' . $last_name;
$full_name = "$first_name $last_name";

  单引号串和双引号串在PHP中的处理是不相同的。双引号串中的内容可以被解释而且替换,而单引
号串中的内容总被认为是普通字符。例如:

 代码如下 复制代码

$foo = 2;
echo "foo is $foo"; // 打印结果: foo is 2
echo 'foo is $foo'; // 打印结果: foo is $foo
echo "foo is $foon"; // 打印结果: foo is 2 (同时换行)
echo 'foo is $foon'; // 打印结果: foo is $foon

  正如你所看到的,在单引号串中甚至反斜杠也失去了他的扩展含义(除了插入反斜杠\和插入单 引号')。所以,当你想在字串中进行变量代换和包含n(换行符)等转义序列时,你应该使用双引
号。单引号串可以用在其他任何地方,脚本中使用单引号串处理速度会更快些,因为PHP语法分析器对
单引号串的处理方式比较单纯,而双引号的处理由于串内部也需要解析,因此更复杂些,所以处理速
度略慢。

  在字符串中引用复杂的变量组合时,可能会产生一些问题,下面的代码会正常工作:

 代码如下 复制代码

echo "value = $foo";
echo "value = $a[$i]";

  而下面的代码却不能得到我们希望的结果:

 代码如下 复制代码

echo "value = $a[$i][$j]"; //我们希望打印二维数组$a的某个元素。

  为避免这些字串使用中的潜在问题,我们通常把复杂的变量从字串中分离开来,就像这样:

 代码如下 复制代码

echo 'value = ' . $a[$i][$j];

  还有一种办法是将复杂变量用花括号括起来,语法分析器就能正确辨认了:

 代码如下 复制代码

echo "value = {$a[$i][$j]}" //打印二维数组$a的某个元素

  这样,又出现新问题了。当我们想在字串中引用花括号字符本身时,就要记得使用转义符了:

 代码如下 复制代码

$var = 3;
echo "value = {$var}"; // 打印结果 "value = 3"
echo "value = {$var}"; // 打印结果 "value = {3}"


三、斜杠和SQL语句

  生成HTML代码或SQL查询语句是编写PHP程序时经常遇到而且是件有趣的事情。为什么这么说呢,
因为这涉及到生成另外一种类型的代码,你必须仔细地考虑和遵循这种代码所要求的编写语法和规
则。

  我们来看这样一个例子,假如你想查询数据库中名字是“O'Keefe”的用户,通常SQL语句的形式
是这样的:

 代码如下 复制代码

select * from users where last_name = 'O'Keefe'

  请注意SQL语句这个英文所有格(撇号)需使用反斜杠转义。PHP专门提供了一些函数来处理这样
的情况,函数AddSlashes($str)的用途就是自动在字串中对引号字符插入反斜杠转义符:

 代码如下 复制代码

$last_name = "O'Keefe";
$sql = "select * from users where last_name = '" . addslashes($last_name) . "'";

  在这个例子中,你还要在last_name字串外面括上单引号(SQL语法要求),由于这里使用的是双
引号串,所以对这对单引号就无须使用转义了。下面的这个语句是使用单引号串的等价形式:

 代码如下 复制代码

$sql = 'select * from users where last_name = '' . addslashes($last_name) . ''';

  任何时候你要在数据库中写入字串,你都必须确保里面的引号正确使用了转义符号,这是很多PHP
初学者常犯的错误。


四、双引号和HTML

  与SQL语句不同,在标准HTML语言中双引号常被用来表示字串(现在很多浏览器具备较强的容错功
能,允许在HTML中用单引号甚至不用引号表示字符串),例如:

 代码如下 复制代码

$html = '<a href="'.$url.'">'.$link.'</a>';
$html = "<a href="$url">$link</a>";

  HTML语言不支持反斜杠转义,这一点在我们使用表单的hidden inputs来传输数据的时候就会有所
体会了。设置hidden inputs的值的最好办法,是使用htmlspecialchars()函数来编码。下面的语句可
以正常传输一个可能包含双引号的数据:

 代码如下 复制代码

  <input type=hidden name=var value="<?php echo htmlspecialchars($var) ?>"> 

一、引号定义字符串。要达到包含引号的目的, 必须分析器在遇到串内普通引号的时候忽略它的原意,我们在引号的 前面加上一个反斜杠来告诉PHP:这个引号是字符串的一部分,正确的表示方法是这样:单引号串可以用在其他任何地方,脚本中使用单引号串处理速度会更快些,因为PHP语法分析器对 单引号串的处理方式比较单纯,而双引号的处理由于串内部也需要解析,因此更复杂些,所以处理速 度略慢。

这个...双引号转义,单引号不转义
如:/r/n是换行,但是如果你用单引号写入文件,不会是换行,而是一个字符,如果用双引号写入文件,就是换行.

最后看看其它网站的说法

” ” 双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。

‘ ‘ 单引号里面的不进行解释,直接输出。

从字面意思上就可以看出,单引号比双引号要快了。

例如:

 代码如下 复制代码
$abc=’my name is tome’;
echo $abc //结果是:my name is tom
echo ‘$abc’ //结果是:$abc
echo “$abc” //结果是:my name is tom

特别在使用MYSQL语句的时候,双引号和单引号的用法让新手不知所措,在这里,举个例子,来进行说明。

假设查询条件中使用的是常量,例如:

 代码如下 复制代码

select * from abc_table where user_name=’abc’;

SQL语句可以写成:

 代码如下 复制代码

SQLstr = “select * from abc_table where user _name= ‘abc’” ;

假设查询条件中使用的是变量,例如:

 代码如下 复制代码

$user_name = $_REQUEST['user_name']; //字符串变量

 代码如下 复制代码

$user=array (”name”=> $_REQUEST['user_name‘,"age"=>$_REQUEST['age'];//数组变量

SQL语句就可以写成:

 代码如下 复制代码

SQLstr = “select * from abc_table where user_name = ‘ ” . $user_name . ” ‘ “;

SQLstr = “select * from abc_table where user_name = ‘ ” . $user["name"] . ” ‘ “;

对比一下:

 代码如下 复制代码

SQLstr=”select * from abc_table where user_name = ‘ abc ‘ ” ;

SQLstr=”select * from abc_table where user_name =’ ” . $user _name . ” ‘ “;

SQLstr=”select * from abc_table where user_name =’ ” . $user["name"] . ” ‘ “;

SQLstr可以分解为以下3个部分:

 代码如下 复制代码
1:”select * from table where user_name = ‘ ” //固定SQL语句
2:$user //变量
3:” ‘ ”
1,2,3部分字符串之间用”.”
本文章来告诉你如何利用程序实现php 404信息的发送,有需要的同学可以参考一下下哈。

针对apache配置中的ErrorDocument 404 /404.php功能,把nginx配置中的

 代码如下 复制代码

error_page 404 /404.php;

改成

 代码如下 复制代码

error_page 404 = /404.php;


php

header实现404无法找到页面

 代码如下 复制代码
Header("HTTP/1.1 404 Not Found");

使用PHP的mysql方法

PHP从一开始就提供了MySQL的函数库。很多程序都依赖于mysql_connect、mysql_query、mysql_fetch_assoc等等,但是PHP手册中建议:

如果你使用的MySQL版本在4.1.3之后,那么强烈建议使用mysqli扩展。

mysqli,或者说MySQL的高级扩展,有一些优点:

有面向对象的接口

prepared statements(预处理语句,可以有效防止SQL-注入攻击,还能提高性能)

支持多种语句和事务

另外,如果你想支持多数据库那么应该考虑一下PDO。

3.不过滤用户输入

应该是:永远别相信用户的输入。用后端的PHP来校验过滤每一条输入的信息,不要相信Javascript。像下面这样的SQL语句很容易就会被攻击:

$username = $_POST["name"];  
 
$password = $_POST["password"];  
 
$sql = "SELECT userid FROM usertable WHERE username='$username'AND password='$password';"; // run query...  
 
这样的代码,如果用户输入”admin’;”那么,就相当于下面这条了:

SELECT userid FROM usertable WHERE username='admin';  
 
这样入侵者就能不输入密码,就通过admin身份登录了。

4.不使用UTF-8

那些英美国家的用户,很少考虑语言的问题,这样就造成很多产品就不能在其他地方通用。还有一些GBK编码的,也会有很多的麻烦。

UTF-8解决了很多国际化的问题。虽然PHP6才能比较完美的解决这个问题,但是也不妨碍你将MySQL的字符集设置为UTF-8。

5.该用SQL的地方使用PHP

如果你刚接触MySQL,有时候解决问题的时候可能会先考虑使用你熟悉的语言来解决。这样就可能造成一些浪费和性能比较差的情况。比如:计算平均值的时候不适用MySQL原生的AVG()方法,而是用PHP将所有值循环一遍然后累加计算平均值。

另外还要注意SQL查询中的PHP循环。通常,在取得所有结果之后再用PHP来循环的效率更高。

一般在处理大量数据的时候使用强有力的数据库方法,更能提高效率。

6.不优化查询

99%的PHP性能问题都是数据库造成的,一条糟糕的SQL语句可能让你的整个程序都非常慢。MySQL的EXPLAIN statement,Query Profiler,many other tools的这些工具可以帮你找出那些调皮的SELECT。

7.使用错误的数据类型

MySQL提供一系列数字、字符串、时间等的数据类型。如果你想存储日期,那么就是用DATE或者DATETIME类型,使用整形或者字符串会让事情更加复杂。

有时候你想用自己定义的数据类型,例如,使用字符串存储序列化的PHP对象。数据库的添加可能很容易,但是这样的话,MySQL就会变得很笨重,而且以后可能导致一些问题。

8.在SELECT查询中使用*

不要使用*在表中返回所有的字段,这会非常的慢。你只需要取出你需要的数据字段。如果你需要取出所有的字段,那么可能你的表需要更改了。

9.索引不足或者过度索引

一般来说,应该索引出现在SELECT语句中WHERE后面所有的字段。

例如,假如我们的用户表有一个数字的ID(主键)和email地址。登录之后,MySQL应该通过email找到相应的ID。通过索引,MySQL可以通过搜索算法很快的定位email。如果没有索引,MySQL就需要检查每一项记录直到找到。

这样的话,你可能想给每一个字段都添加索引,但是这样做的后果就是在你更新或者添加的时候,索引就会重新做一遍,当数据量大的时候,就会有性能问题。所以,只在需要的字段做索引。

10.不备份

也许不常发生,但是数据库损毁,硬盘坏了、服务停止等等,这些都会对数据造成灾难性的破坏。所以你一定要确保自动备份数据或者保存副本。

11.另外:不考虑其他数据库

MySQL可能是PHP用的最多的数据库了,但是也不是唯一的选择。 PostgreSQL和Firebird也是竞争者,他们都开源,而且不被某些公司所控制。微软提供SQL Server Express,Oracle有10g Express,这些企业级的也有免费版。SQLite对于一些小型的或者嵌入式应用来说也是不错的选择。

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • php语言实现redis的客户端

    php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • jQuery+jRange实现滑动选取数值范围特效

    有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • jQuery+slidereveal实现的面板滑动侧边展出效果

    我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • PHP+jQuery翻板抽奖功能实现

    翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • SQLMAP结合Meterpreter实现注入渗透返回shell

    sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31