PHP数组合并函数(+)、array_merge、array_merge_recursive

 更新时间:2016年11月25日 14:58  点击:1987
我在php学习在使用到最多的数据合并方法就是array_merge、array_merge_recursive函数了,当然还会少用到操作符(+)函数了,下面我来给大家整理一下这几个函数的一些用法。

PHP中,有3种方法来进行数组合并:操作符(+)、array_merge、array_merge_recursive,其中前两种方式为一维数组的合并,第三种为递归合并。
在说PHP的数组合并之前,先要明白,PHP的数组分为索引数组和关联数组。索引数组是指没有键值和键值为数字的数组,关联数组是指键值为字符的数组。

下面说说操作符(+)和array_merge的区别:

1.当为索引数组时,合并相同键值的数组,操作符以最前面的值为合并后的结果,array_merge则是把相同键值的数组合并,并重新索引(不同键值的数组合并时,也会从0开始重新生成数字索引)。

1、“+”运算符
规则:
  当两个数组的键名是数字键名或者字符串键名
  $c = $a + $b
  在$a后追加($b在$a中不存在的键名)键名和值
注意:
  1、不覆盖,只是追加不存在的键名和对应的值
  2、键名不重新索引
  3、无论是全部数字键名还是混合,都只是追加键名和值,如果键名相同则不进行追加,即把最先出现的值作为最终结果返回
例1:数字键名

 代码如下 复制代码

$a = array(
    'a',
);
$b = array(
    'u',
);
$c = $a + $b;
var_dump($c);
 
output:
array(1) {
  [0]=>
  string(1) "a"
}
 例2:数字键名

$a = array(
    66=>'a',
);
$b = array(
    60=>'u',
    66=>'c'
);
$c = $a + $b;
var_dump($c);
 
output:
array(2) {
  [66]=>
  string(1) "a"
  [60]=>
  string(1) "u"
}
例3:字符键名

<?php 
$a = array(
    1=>'a',
    2=>'b',
    'c'=>'c',
    'd'=>'d',
);
$b = array(
    1=>'u',
    3=>'v',
    'c'=>'w',
    'd'=>'x',
    'y'=>'y',
    60=>'z',
);
$c = $a + $b;
var_dump($c);
?>
 
output:
array(7) {
  [1]=>
  string(1) "a"
  [2]=>
  string(1) "b"
  ["c"]=>
  string(1) "c"
  ["d"]=>
  string(1) "d"
  [3]=>
  string(1) "v"
  ["y"]=>
  string(1) "y"
  [60]=>
  string(1) "z"
}

 

2.当为关联数组时,合并相同字符键值的数组,操作符合并规则是前面的覆盖后面的,array_merge则是后面的覆盖前面的。

例:

 代码如下 复制代码

$arr5 = array('a'=>'aaaa');
$arr6 = array('a'=>'bbbb');

var_dump($arr5+$arr6);
var_dump(array_merge($arr5,$arr6));
输出:
array (size=1)
  'a' => string 'aaaa' (length=4)
array (size=1)
  'a' => string 'bbbb' (length=4)


array_merge() 将一个或多个PHP数组合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

3.array_merge_recursive的合并规则和array_merge相同,只是array_merge_recursive支持多维数组的合并。

例:

 代码如下 复制代码

$a = array(

1=>'a',
2=>'b',
'c'=>'c',
'd'=>'d',

);

$b = array(
1=>'u',
3=>'v',
'c'=>'w',
'd'=>'x',
'y'=>'y',
60=>'z',

);

var_dump(array_merge_recursive($a,$b));

输出:

array (size=8)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  'c' =>
    array (size=2)
      0 => string 'c' (length=1)
      1 => string 'w' (length=1)
  'd' =>
    array (size=2)
      0 => string 'd' (length=1)
      1 => string 'x' (length=1)
  2 => string 'u' (length=1)
  3 => string 'v' (length=1)
  'y' => string 'y' (length=1)
  4 => string 'z' (length=1)

php5中魔术方法有9个哦,下面我给大家整理了魔术方法9个的使用与简单的应用例子,如果你有兴趣不防进入参考吧,希望文章对各位同学会带来帮助哦。

1.__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用。

 

 代码如下 复制代码
class Test { function __construct() { echo "before"; } } $t = new Test();
class Test { function __construct() { echo "before"; } } $t = new Test();

输出是:

start

构造器是一个魔术方法,当对象被实例化时它会被调用。在一个类声明时它常常是第一件做的事但是没得必要他也像其他任何方法在类中任何地方都可以声明,构造器也能像其他方法样继承。如果我们想到以前继承例子从介绍到oop,我们能添加构造方法到Animal 类中
1

 代码如下 复制代码

class Animal{

  public function __construct() {

    $this->created = time();

    $this->logfile_handle = fopen('/tmp/log.txt', 'w');

  }

}

现在我们创建一个类来继承Animal类 - Penguin类!不添加任何属性和方法在Penguin类中,我们能申明并定义它继承自

 代码如下 复制代码

Animal类,如:
class Penguin extends Animal {
}

$tux = new Penguin;
echo $tux->created;

我们知道php5对象模型 和类名相同的函数是类的构造函数,那么如果我们同时定义构造函数和__construct()方法的话,php5会默认调用构造函数而不会调用__construct()函数,所以__construct()作为类的默认的构造函数
2.__destruct() 当删除一个对象或对象操作终止的时候,调用该方法。
Java代码

 代码如下 复制代码
class Test { function __destruct() { echo "end"; } } $t = new Test();将会输出end
class Test { function __destruct() { echo "end"; } } $t = new Test();将会输出end

我们就可以在对象操作结束的时候进行释放资源之类的操作

3.__get() 当试图读取一个并不存在的属性的时候被调用。

如果试图读取一个对象并不存在的属性的时候,PHP就会给出错误信息。如果在类里添加__get方法,并且我们可以用这个函数实现类似java中反射的各种操作。

 

 代码如下 复制代码
class Test { public function __get($key) { echo $key . " 不存在"; } } $t = new Test(); echo $t->name; 就会输出:name 不存在
class Test { public function __get($key) { echo $key . " 不存在"; } } $t = new Test(); echo $t->name; 就会输出:name 不存在

例子

 代码如下 复制代码

class Penguin extends Animal {

  public function __construct($id) {

    $this->getPenguinFromDb($id);

  }

  public function getPenguinFromDb($id) {

  }

}


4.__set() 当试图向一个并不存在的属性写入值的时候被调用。

 

 代码如下 复制代码

class Test { public function __set($key,$value) { echo '对'.$key . "附值".$value; } } $t = new Test(); $t->name = "aninggo"; 就会输出:对 name 附值 aninggo
class Test { public function __set($key,$value) { echo '对'.$key . "附值".$value; } } $t = new Test(); $t->name = "aninggo"; 就会输出:对 name 附值 aninggo

5.__call() 当试图调用一个对象并不存在的方法时,调用该方法。
 

 代码如下 复制代码


class Test { public function __call($Key, $Args) { echo "您要调用的 {$Key} 方法不存在。你传入的参数是:" . print_r($Args, true); } } $t = new Test(); $t->getName(aning,go);
class Test { public function __call($Key, $Args) { echo "您要调用的 {$Key} 方法不存在。你传入的参数是:" . print_r($Args, true); } } $t = new Test(); $t->getName(aning,go);
程序将会输出:


您要调用的 getName 方法不存在。参数是:Array
(
[0] => aning
[1] => go
)
您要调用的 getName 方法不存在。参数是:Array
(
[0] => aning
[1] => go
)

6.__toString() 当打印一个对象的时候被调用

这个方法类似于java的toString方法,当我们直接打印对象的时候回调用这个函数

 代码如下 复制代码


class Penguin {

 

  public function __construct($name) {

      $this->species = 'Penguin';

      $this->name = $name;

  }

 

  public function __toString() {

      return $this->name . " (" . $this->species . ")n";

  }

}

在适当的位置,输出该对象通过调用echo输出它,如:

 代码如下 复制代码

$tux = new Penguin('tux');

echo $tux;


7.__clone()

我们看过一个使用clone关键字的例子,在我的介绍从入门到oop的第二部分,创建对象的副本,而不是有两个变量指向同一个实际的数据。在一个类中重写此方法,我们可以观察发生了什么当在对象上使用clone关键字时,。虽然这是不是我们每一天能遇到的,一个漂亮的用例是创建一个真正的单例模式通过添加private访问修饰符给这个方法。

 代码如下 复制代码

class Test { public function __clone() { echo "我被复制了!"; } }$t = new Test(); $t1 = clone $t;程序输出:我被克隆了!


__sleep

__sleep()方法会被调用当对象被序列化后,并允许你处理序列化。这有各种各样的程序,一个很好的例子如果一个对象包含某种类型的指针,例如文件句柄或引用另一个对象。当对象被序列化然后解序列化,这些引用类型是无用的,因为这些类型的引用的目标可能不再存在或有效。因此,最好是来取消这些信息在存储它们之前。

__wakeup

__wakeup()是与__sleep()方法相反的,允许您更改对象解序列化的行为。和__sleep()一起使用,可以用来恢复被删除的句柄和对象当对象被序列化时。一个很好的例子程序是数据库句柄被取消设置当该项被序列化,然后恢复到当前配置中设置项目时,解序列化一个数据库句柄。


__autoload()方法可

比如我们将上面的那个Person类所在的文件定义为 Person_class.php ,
再新建一个php文件 test.php,编辑内容:

 代码如下 复制代码
function __autoload($calssName)
{
include $className.”_class.php”; //看到这也许你就明白了吧?哈哈
}
$p = new Person(“mifan”, 22);
$p->say();

这样执行该test.php页面就不会出现错误了。

php魔术方法一般在什么情况下需要使用


举个简单的例子,当类里面没有属性$name; 但是你不小心访问这个属性,这个时候就会出错。但是让你可以设置魔术方法__get($name){ return $name . "不存在"};就会自动调用__get($name);这样程序就会不因为你访问了一个不存在的属性报错而中断执行
补充下 __get($v) 访问未定义的属性时调用,
__set($v) ?未定义的属性赋值时调用,
__isset($v)对未定义的属性使用isset()函数时调用,
__unset($v)和isset($v)类似
__call($method)访问未定义的方法是被调用

 

下面来给大家分享一篇关于PHP开关语句Switch case学习笔记,如果你也正在学习php可以进入参考一下这篇文章,可能会给你带很大的帮助哦。

PHP 中的 Switch 语句用于执行基于多个不同条件的不同动作。如果你希望有选择地执行若干代码块之一,请使用 Switch 语句。

switch语法

 代码如下 复制代码

switch (expression)  //设置表达式
{
case label1: //比较标签1的值
 code to be executed if expression = label1; //如果匹配输出关联的代码
 break; //结束代码跳出语句
case label2: //比较标签1的值
 code to be executed if expression = label2;
 break;
default: //如果没有匹配,执行默认代码
 code to be executed
 if expression is different
 from both label1 and label2;
}

工作原理:

对表达式(通常是变量)进行一次计算
把表达式的值与结构中 case 的值进行比较
如果存在匹配,则执行与 case 关联的代码
代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
如果没有 case 为真,则使用 default 语句

 代码如下 复制代码

<?php
$x = 1; //变量x赋值为4
switch ($x)
{
 case 1: //要比较的值为1
  echo "数字 1";
  break;
 case 2: //要比较的值为2
  echo "数字 2";
  break;
 case 3: //要比较的值为3
  echo "数字 3";
  break;
 default: //没有符合的匹配时,输出默认值
  echo "没有1到3的数字";
}
?>

学习经验, swicth case只是一个开关语句,如果有多条件或多种情况我们就不可以使用它了,这时我们需要使用if else来操作了。

在php中if可以使用直接if else 或ElseIf来判断其它可能的出现情况了,下面我来给大家介绍if else与ElseIf用法及一些细节上的区别了。

If…Else 语句

如果您希望在某个条件成立时执行一些代码,在条件不成立时执行另一些代码,请使用 if….else 语句。

语法

 代码如下 复制代码

if (condition) //设置条件
  code to be executed if condition is true; //如果条件为真的代码被执行;
else
  code to be executed if condition is false;  //如果条件为假,代码被执行


实例1
如果当前日期是星期一,下面的代码将输出 “星期一快乐。”,否则会输出 “天天快乐。”:

 代码如下 复制代码

<?php
$d=date("D"); //变量d赋值
if($d=="Mon"){
 echo "星期一快乐!";
}else{
 echo "天天快乐!";
}
?>

实例2

如果d等于1时输出“数字1”,否则输出“数字不是1”

 代码如下 复制代码
<?php
$d=2; //变量d赋值
if($d==1){
 echo "数字1"; //变量d等于1时输出的值
}else{
 echo "数字不是1"; //不等于1时输出的值
}
?>

ElseIf 语句

如果希望在多个条件之一成立时执行代码,请使用 elseif 语句:

语法

 代码如下 复制代码

if (condition) //条件1
  code to be executed if condition is true; //条件1为真,代码被执行
elseif (condition) //条件2
  code to be executed if condition is true; //条件2为真,代码被执行
else
  code to be executed if condition is false;  //2个条件都为假时,代码被执行


实例


当d的值等于1时,输出“数字1”;等于2时输出“数字2”;当两个条件都不成立时输出“没有符合的数字”

 代码如下 复制代码

<?php
$d=3; //变量d赋值
if($d==1){
 echo "数字1"; //当d等于1时输出“数字1”
}
elseif ($d==2){
 echo "数字2"; //当d等于2时输出“数字2”
}
else{
 echo "没有符合的数字"; //两个条件都不成立时输出的内容
}
?>

总结在 if else与ElseIf 中 if中可以包括有else与elseif但是如果使用了if else之后就不会出现elseif但相反就可以,从上面例子我们就可以看出来,更多php教程可点击连接查看。

整理了一些学习中可能会用到一具php字符吕操作了例子,这些例子由网上整理并且大部份有简单的测试以直接使用哦,当然php字符串操作函数系统自带的肯定可以使用,具体怎么用大家根据自己情况来定吧。

1、字符串的连接符
半角符号“.”是字符串的连接符,可以把两个或两个以上的字符串连接成一个字符串。例如:
<?php
$name = "一聚教程网:";
$url = www.51ebk;
echo $name . $url . ".com";
?>
 运行结果为:一聚教程网:www.111cn.net
 
2、去除字符串首尾空格和特殊字符
 用户在输入数据时,经常会在无意中输入多余的空格,在有些情况下,字符串中不允许出现空格和特殊字符,此时就要去除字符串中的空格和特殊字符。
 
2.1 trim()函数
trim()函数用于去除字符串开始位置以及结束位置的空格,并返回当前去掉空格后的字符串。
语法格式:string trim(string str [,string charlist]);
trim()函数的参数str是要操作的字符串对象,参数charlist是可选参数,指定需要从待定的字符串中删除特定的字符,如果不设该参数,则所有的可选字符都将被删除。参数charlist的可选值如下:
参数值/说明
    NULL,空值
t    tab,制表符
n   换行符
x0B    垂直制表符
r    回车符
" "    空格
注:除了以上默认的过滤字符外,也可以在charlist中提供需要过滤的特殊字符
例如:
<?php
$str = "rr(:@_@ 一聚教程网 @_@:)";
echo trim($str);    //去除字符串左右两边的空格
echo "<br />";     //执行换行
echo trim($str, "rr(::)");  //去除字符串左右两边的特殊字符rr(::) 
?>
 运行结果:
(:@_@ 一聚教程网 @_@:)
@_@ 一聚教程网 @_@
 
2.2 ltrim()函数
ltrim()函数用于去除字符串左边的空格或者指定字符串。
语法格式如下:
string ltrim(string str[, string charlist]);
例如:
<?php
$str = " (:@_@ 一聚教程网 @_@:) ";
echo ltrim($str);    //去除字符串左边的空格
echo "<br />";
echo ltrim($str, "(:@_@ ");    //去除字符串左边的字符@_@:)
?>
运行结果为:
(:@_@ 一聚教程网 @_@:)
一聚教程网 @_@:)
 
2.3rtrim()函数
 rtrim()函数用于去除字符串右边的空格或者指定字符串。
语法格式如下:
string rtrim(string str[, string charlist]);
例如:
<?php
$str = " (:@_@ 一聚教程网 @_@:) ";
echo rtrim($str);    //去除字符串右边的空格
echo "<br />";
echo rtrim($str, "@_@:) ");    //去除字符串右边的字符@_@:)
?>
 运行结果为:
(:@_@ 一聚教程网 @_@:)
(:@_@ 一聚教程网

字符串转义、还原的方法有两种:一种是手动转义、还原字符串数据,另一种是自动转义、还原字符串数据。
1、手动转义、还原字符串数据
字符串可以用单引号(')、双引号("")、定界符({})3种方法定义。当使用字符串时,很可能在该字符串中存在这几种符号与PHP脚本混淆的字符,因此必须要做转义语句。这就需要在他前面加转义符号“”。
“”是一个转义字符,紧跟在“”后面的字符将变得没有任何意义。
例如:
<?php
    echo "I'm Tom";
?>
运行结果是:I'm Tom。
2、自动转义、还原字符串数据
自动转义、还原字符串数据可以应用PHP提供的addslashes()函数和stripslashes()函数来实现。
addslashes()函数用来为字符串加入斜线“”。
stripslashes()函数用来将使用了addslashes()函数转义后的字符串还原。
例如:
<?php
    $str = "I'm Tom";
    $str2 = addslashes($str);    //对字符串中的特殊字符进行转义
    echo $str2 . "<br />"; 
    echo stripslashes($str2);     //将转义后的字符串恢复,然后输出
?>
 运行结果:
I'm Tom
I'm Tom
以上两个函数实现了对指定字符串进行自动转义和还原。除了上面介绍的方法以外,还可以对要转义、还原的字符串进行一定的范围限制,通过使用addcslashes()函数和stripcslashes()函数实现对指定范围内的字符串进行自动转义、还原。
addcslashes()函数实现转义字符串中的字符,即在指定的字符串前加上反斜线。
stripcslashes()函数用来将使用addcslashes()函数转义的字符串还原。
例如:
<?php
    $str = "自学PHP就上一聚教程网";
    $str2 = addcslashes($str, "自学PHP就上一聚教程网");
    echo $str2 . "<br />";    //输出转义后的字符串
   echo stripcslashes($str2);    //输出还原后的字符串
?>
运行结果:
327324321247PHP276315311317321247260311315370 
自学PHP就上一聚教程网 


长度
PHP提供strlen函数来计算字符串的长度:
$str = "test";
echo strlen($str); // 将输出 4
有点奇怪的是strlen将中日等汉字以及全角字符都当作两个或四个长度计算。好在mbstring或icon两个函数可以帮助解决这个问题,比如:
$len = iconv_strlen($str, "GBK");
$len = mb_strlen($str, "GBK");
注:mbstring模块提供了大量的对含有多字节字符的字符串的处理函数,推荐多加应用,由于这篇文章讲的是字符串入门,所以不打算详细解说。
分隔与连接
PHP允许你把一个字符串按照一个分隔符进行分隔成一个数组,或者将一个数组组合成一个字符串。看下面的例子:
$str = "i love iwind";
$array = explode(" ", $str);
上面的explode函数,就把$str字符串按空格字符进行分隔,结果返回一个数组 $array:array("i", "love", "iwind").与explode函数有类似功能的有:preg_split(), spliti(), split()等函数。
与此相反的,implode和join则能把一个数组结合成一个字符串,他们是具有完全相同功能的函数。
$array = array("i", "love", "iwind");
$str = implode(" ", $array);
例中的implode函数将数组$array的每个元素用空格字符进行连接,返回一个字符串 $str: "i love iwind".
裁剪
一个字符串首和尾,可能不是你想要的部分,就可以用trim,rtrim,ltrim等函数,分别去除一个字符串两端空格,一个字符串尾部空格,一个字符串首部空格。
echo trim(" i love iwind "); // 将得到 "i love iwind"
echo rtrim(" i love iwind "); // 将得到 " i love iwind"
echo ltrim(" i love iwind "); // 将得到 "i love iwind"
其实这三个参数不仅可以去除字符串首尾的空格,还可以去除它们的第二个参数指定的字符,如:
echo trim(",1,2,3,4,", ","); // 将得到 1,2,3,4 两端的","号被裁掉了。
有时还会看到有人使用chop这个函数,其实它是rtrim的同义函数。
大小写
对于英文字母来说,可以用strtoupper,strtolower将其转变成大写或小写。
echo strtoupper("i love iwind"); // 将得到 I LOVE IWIND
echo strtolower("I LOVE IWIND"); // 将得到 i love iwind
比较
一般可以用 !=, == 比较两个对象是否相等,只所以说是两个对象,是因为它们不一定全部为字符串,也可以为整型等等。比如
$a = "joe";
$b = "jerry";
if ($a != $b)
{
echo "不相等";
}
else
{
echo "相等";
}
如果用 !==,===(可以看到多了一个等号)比较的话,两个对象的类型要严格相等才能返回true;否则用==,!=则会将字符串自动转换成相应的类型,以便进行比较.
22 == "22"; // 返回 true
22 === "22"; // 返回false
正因为这样,所以我们的程序时常会发生一些想不到的“意外”:
0 == "我爱你"; // 返回true
1 == "1 我爱你";// 返回true
PHP里还有这样一组用于字符串比较的函数:strcmp,strcasecmp,strncasecmp(), strncmp(),它们都是如果前者比后者大,则返回大于0的整数;如果前者比后者小,则返回小于0的整数;如果两者相等,则返回0.它们比较的原理与其它语言的规则都是一样的。
strcmp是用于区分大小写(即大小写敏感)的字符串比较:
echo strcmp("abcdd", "aBcde"); // 返回 1 (>0), 比较的是 "b"和"B"
strcasecmp用于不区分大小写的字符串比较:
echo strcasecmp("abcdd", "aBcde"); // 返回 -1 (<0), 比较的是"d"和"e"
strncmp用于比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
echo strncmp("abcdd", "aBcde", 3); // 返回 1 (>0), 比较了 abc 和 aBc

strncasecmp用于不区分大小写的比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
echo strncasecmp("abcdd", "aBcde", 3); // 返回 0, 比较了 abc 和 aBc, 由于不区分大小写,所以两者是相同的。
还有一种情况是单单比较字符串大小,达不到我们预定的要求,比如照常理 10.gif 会比 5.gif 大,但如果应用上面几个函数,就会返回 -1,即表示 10.gif比5.gif,针对这种情况,PHP提供了两个自然对比的函数strnatcmp,strnatcasecmp:
echo strnatcmp("10.gif", "5.gif"); // 返回 1 (>0)
echo strnatcasecmp("10.GIF", "5.gif"); // 返回 1 (>0)
替换
替换的意义在于将一个字符串的一部分进行改变,使之成为别外一个新的字符串,以满足新的要求。PHP里通常用str_replace("要替换的内容", "要取代原内容的字符串", "原字符串")进行替换。
echo str_replace("iwind", "kiki", "i love iwind, iwind said"); // 将输出 "i love kiki, kiki said"
即将 原字符串中的所有"iwind"都替换成了"kiki".
str_replace是大小写敏感的,所以对你不能设想用 str_replace("IWIND", "kiki",...)替换原字符串中的"iwind".
str_replace还可以实现多对一,多对多的替换,但无法实现一对多的替换:
echo str_replace(array("iwind", "kiki"), "people", "i love kiki, iwind said");
将会输出
i love people, people said
第一个参数中的array("iwind", "kiki")都被替换成了"people"
echo str_replace(array("iwind", "kiki"), array("gentle man", "ladies"), "i love kiki, iwind said");
输出 i love ladies, gentle man said 。也就是说第一个数组中的元素被第二个数组中的相对应的元素替换掉了,如果有一个数组比另一个数组元素数要少,那么不足的都会当作空来处理。
与此有些类似的是strtr,用法请参阅手册.
此外,PHP还提供了substr_replace,实现替换一部分的字符串。语法如下:
substr_replace (原字符串, 要替代的字符串, 开始替换的位置 [, 替换的长度])
其中,开始替换的位置从0开始计算,应该小于原字符串的长度。要替换的长度是可选的。
echo substr_replace("abcdefgh", "DEF", 3); // 将输出 "abcDEF"
echo substr_replace("abcdefgh", "DEF", 3, 2); // 将输出 "abcDEFfgh"
第一个例子中,从第三个位置(即"d")开始替换,从而把 "defgh"都替换成了“DEF”
第二个例子中,也是从第三个位置(即"d")开始替换,但只能替换2个长度,即到e,所以就把"de"替换成了"DEF".
PHP还提供了preg_replace,preg_replace_callback,ereg_replace,eregi_replace等函数应用正则表达式来完成字符串替换,用法请参考手册。
查找与匹配
PHP里用于查找或者匹配或者定位的函数非常多,它们都有不同的意义。这里只讲述用得比较多的strstr,stristr.后者与前者的功能,返回值都一样,只是不区分大小写。
strstr("母字符串", "子字符串")用来查找子字符串在母字符串中第一次出现的位置,并返回母字符串中从子字符串开始到母字符串结束的部分。比如
echo strstr("abcdefg", "e"); //将输出 "efg"
如果找不到子字符串,则返回空。因为可以用来判断一个字符串中是否含有另外一个字符串:
$needle = "iwind";
$str = "i love iwind";
if (strstr($str, $needle))
{
echo "里面有 iwind";
}
else
{
echo "里面没有 iwind";
}
将会输出"里面有 iwind"

字符串删除操作

是这样的

$result = mysql_query($sql);
$string = '{"array":[';
while($row = mysql_fetch_array($result)){
$string .= '{"id":"'.$row['id'].'"},';
}
$string = substr($string,0,-1);
$string .= ']}';
$string = substr($string,0,-1) 这行代码的意思是,对$string 进行裁剪,从第 0 位开始,到倒数第一个。

这样的结果是,如果sql查询后有结果集的话,没问题,但是如果结果集为 空 的话,字符串就变成了{"array":]} ,数组被破坏了。想通过判断结果集是否为空来处理,但是 使用 empty($result) 并没有用,因为这个结果集是否为空,需要用 mysql_fetch_array() 来判断。所以增加$result 为空的判断失败了。

那另外一个解决办法就是从字符串上动手了。我的想法是,我想删除最后一个字符,但是它必须满足某个条件,比如最后一个字符是 ',' ,看php 的api 上,有这么一个方法 rtrim() ,trim() 就是删除一些特殊字符用的,rtrim() 是只对字符串的右边操作。把代码改成下面就OK了。

$string = rtrim($string,',');
PHP 提供的字符串操作的 API 还是比较丰富的。


字符串转换成数组

By 新一 | 2013 年 6 月 28 日 0 Comment
今天在php论坛中看到以为朋友发了一个帖子请教php如何把字符串转换成数组;作为php程序员的新一第一反应是联想到explode(),implode()这两个函数。新一也是用里面的函数进行转换成数组的。

con[1]=28&selt[1]=1&con[2]=29&selt[2]=4&con[3]=26&selt[3]=4

&con[4]=30&selt[4]=2&con[5]=4&selt[5]=1&con[6]=11&con[7]=12
上面就是网友需要转换成PHP数组的字符串;下面也是新一提供PHP转换代码


新一的PHP代码也可以解决字符串转换成数组的问题。最后phper网友应该在手册上面查到了parse_str()函数就可以把字符串转换成PHP数组;下面介绍一下parse_str()函数的说明让自己在脑子中好有印象.
 parse_str() 函数把查询字符串解析到变量中。


parse_str(string,array)
string:需要转换的字符串;
array:返回到一个数组中;
如果没有设置array的话就覆盖同名变量

[!--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
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

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

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#数组的常用操作方法小结

    Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
  • php curl模拟post请求和提交多维数组的示例代码

    下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <&#63;php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
  • 金额阿拉伯数字转换为中文的自定义函数

    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
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

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

    下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • PHP 二维数组根据某个字段排序的具体实现

    本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25