多数大学生出来选择的工作和专业无关
首页 > 专业知识

PHP怎么实现字符串全排列组合?

时间:2018-12-14 19:37:51 [来源]:郑州PHP培训学校

   PHP怎么实现字符串全排列组合?

  本篇文章主要给大家介绍PHP字符串全排列算法具体是怎么实现的。
  相信大家对于全排列的概念并不陌生,因为在高中或者大学的数学课文中是必不可少的一个课程知识点。全排列就是从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列,当m=n时所有的排列情况叫全排列。
  那么在我们PHP学习过程中,也会遇到关于字符串全排列的问题。
  下面我们通过具体的代码示例,为大家详细介绍PHP字符串全排列算法。
  <?php
  $str = 'abc';
  // 字符串转换为数组
  $a = str_split($str);
  // 调用perm函数
  perm($a, 0,count($a) - 1);
  /**
  * 定义perm函数
  * @param $ar // 排列的字符串
  * @param $k // 初始值
  * @param $m // 最大值
  */
  function perm(&$ar, $k, $m)
  {
  // 初始值是否等于最大值
  if ($k == $m) {
  // 将数组转换为字符串
  echo join('', $ar), PHP_EOL;
  } else {
  // 循环调用函数
  for ($i = $k; $i <= $m; $i++) {
  // 调用swap函数
  swap($ar[$k], $ar[$i]);
  // 递归调用自己
  perm($ar, $k + 1, $m);
  // 再次调用swap函数
  swap($ar[$k], $ar[$i]);
  }
  }
  }
  function swap(&$a, &$b)
  {
  $c = $a;
  $a = $b;
  $b = $c;
  }
  这里我们主要定义了两个方法perm和swap函数,并且在代码中详细得给大家注释了每一步操作的含义,有助于大家参考理解。
  那么在上述代码中,我们涉及到递归算法,对于此知识点不清楚的朋友可以参考这篇文章【PHP递归排序怎么实现的?】。
  最终通过浏览器访问,字符串全排列结果如下:
  本篇文章就是关于PHP实现字符串全排列组合的算法介绍,具有一定的参考价值,希望对需要的朋友有一定的帮助!
 
  PHP怎么删除二维数组中的重复元素?
  在之前的文章【PHP怎么删除数组中重复元素?】中已经为大家介绍过PHP删除普通一维数组的方法,需要的朋友可以先参考学习下。
  简单的说,二维数组也就是数组的数组,你需要两个索引来选取元素。
  下面我们通过具体的代码示例,为大家详细介绍删除二维数组中重复元素的方法!
  <?php
  /**
  * PHP删除二维数组中的重复元素
  */
  // 对二维数组进行去重复
  function more_array_unique($arr)
  {
  //先把二维数组中的内层数组的键值记录在在一维数组中foreach ($arr[0] as $k => $v) {
  $arr_inner_key[] = $k;
  }
  foreach ($arr as $k => $v) {
  //降维 用implode()也行
  $v = join(",", $v);
  //保留原来的键值 $temp[]即为不保留原来键值$temp[$k] = $v;
  }
  //去重:去掉重复的元素
  $temp = array_unique($temp);
  foreach ($temp as $k => $v) {
  //拆分后的重组 如:Array( [0] => 张三 [1] => 18 )$a = explode(",", $v);
  //将原来的键与值重新合并
  $arr_after[$k] = array_combine($arr_inner_key, $a);}
  return $arr_after;
  }
  $arr = [
  ['name' => '张三', 'age' => 18],
  ['name' => 'Tom', 'age' => 19],
  ['name' => 'Tom', 'age' => 19],
  ['name' => '张三', 'age' => 50],
  ['name' => '王小二', 'age' => 30],
  ];
  echo "<pre>";
  print_r(more_array_unique($arr));
  在此段代码中,我们定义了一个$arr的二维数组,其中有两对重复元素,“张三”和“Tom”,但是他们的年龄有所不同。
  大家应该都知道array_unique()函数只适用于一维数组,那么二维数组就需要我们自己定义一个函数方法,不过也可以用到array_unique()函数。
  如上述代码示例中,我们定义了more_array_unique的方法,用来实现删除二维数组中重复元素。
  注:
  join函数是该函数的别名:implode()。
  array_combine函数:表示创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值array_unique 函数:移除数组中重复的值。
  PHP怎么实现字符串转义和还原?
  首先大家可以简单了解下什么是转义字符?有什么用?
  转义字符是一种特殊的字符常量。转义字符以反斜线"\"开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。
  转义字符的用处:
  1:将普通字符转为特殊用途,如后退键,回车键等。
  2:用来将特殊意义的字符转换回它原来的意义。
  3:在数据写入数据库前,都会使用转义字符(函数)对一些敏感字符进行转义。避免网站被注入攻击。
  那么我们在PHP开发项目过程中,可能就会遇到需要将大量数据进行转义的操作。
  下面我们就通过简单的代码示例为大家介绍PHP转义还原字符串的方法。
  一、转义字符串的函数使用示例:
  <?php
  $str = "['name'=>'张三','age'=>19]";
  echo $str . "<br>";
  //对字符串进行转义
  $a = addslashes($str);
  //输出转义后的字符串
  echo $a . "<br>";
  addslashes函数:使用反斜线引用字符串。
  其中参数则表示要转义的字符数据。返回值是返回转义后的字符。
  上述代码中我们定义一个数组变量$str,并且使用双单引号进行表示,再使用PHP中addslashes函数进行转义。这里我们需要注意,不能使用四个双引号,因为那样的话系统就没有办法解析字符串开始和结束的位置,出现错误解析。
  二、还原字符串的函数使用示例:
  <?php
  $str = "['name'=>'张三','age'=>19]";
  echo $str . "<br>";
  //对字符串进行转义
  $a = addslashes($str);
  //输出转义后的字符串
  echo $a . "<br>";
  //对转义后的字符串进行还原
  $b = stripslashes($a);
  //输出还原后的字符串
  echo $b . "<br>";
  stripslashes函数:反引用一个引用字符串。
  返回值则是,一个去除转义反斜线后的字符串(\' 转换为 ' 等等)。双反斜线(\\)被转换为单个反斜线(\)。
  这里我们主要使用到stripslashes函数将转义后的字符串进行还原。
  本篇文章就是关于PHP转义还原字符串数据的具体方法介绍,希望对需要的朋友有所帮助!
 

上一篇:PHP编程中八种常见的文件操作方式

下一篇:如何用PHP实现倒计时功能