首页 > 编程技术 > php

array_map实现递归功能

发布时间:2016-11-25 16:47

本文章来给大家介绍array_map实现递归功能,各位有需要了解的朋友可参考。

array_map(callback, arr1, arr2……);函数返回用户自定义回调函数执行后的数组。

 

 代码如下 复制代码
function escapeString($value) {
 if (empty($value)) {
  return $value;
 } else {
  return is_array($value) ? array_map('escapeString', $value) : addslashes($value);
 }
}
在php中array_map,array_filter,array_walk三个函数都是对数据操作的,下面我来介绍这三个函数的用法与区别。


array_walk:

array_walk()返回布尔值,如果回调函数需要直接作用于数组中的值,则给回调函数的第一个参数指定为引用。这样任何对这些单元的改变也将会改变原始数组本身。此函数可以同时获取到数组的key和value。

 

array_map:

array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

简单点说就是回调函数对数组中每个值都会产生最终影响,并在调用array_map的返回值中体现。

此函数可以同时对多个数组进行操作。并最终合并为一个数组(每个数组根据下标平行对其到同一个二维数组中)。

 


array_filter:

此函数是专门用于过去数组中的元素,简单点说就是对数组中的经过回调函数判断的value进行过滤,并通过array_filter()函数返回处理后的数组。

 


因此分析到此我们可以是哟on个array_walk和array_map来做数组的预处理,最常见的是对每个数组值的trim操作。以下是笔者的示例代码:

 

 代码如下 复制代码

<?php
$tmp = array(' AAAA BBBB CCCC ', 'aaaa bbbb c ', ' dddddd eeeeee');

function array_walk_func(&$v, $k) {
 $v = trim($v);
}
array_walk($tmp, 'array_walk_func');
var_dump($tmp);

function array_map_func($v) {
 return trim($v);
}
$ret = array_map('array_map_func', $tmp);
var_dump($ret);


输出结果:

array(3) {
  [0] =>
  string(14) "AAAA BBBB CCCC"
  [1] =>
  string(11) "aaaa bbbb c"
  [2] =>
  string(13) "dddddd eeeeee"
}
array(3) {
  [0] =>
  string(14) "AAAA BBBB CCCC"
  [1] =>
  string(11) "aaaa bbbb c"
  [2] =>
  string(13) "dddddd eeeeee"
}

在php中我们要把字符串转换在数组可使用函数有str_split()、explode(),preg_split()函数了,如果把数组转换在字符串我们也有一个函数implode()函数与直接把数组连接起来。

我们先来看字符串转换成数组

str_split()

<?php
print_r(str_split("Hello"));
?>

Array
(
[0] => H
[1] => e
[2] => l
[3] => l
[4] => o
)

explode()

<?php
$str = "Hello world. It's a beautiful day.";
print_r (explode(" ",$str));
?>

结果

Array
(
[0] => Hello
[1] => world.
[2] => It's
[3] => a
[4] => beautiful
[5] => day.
)

preg_split()函数

 代码如下 复制代码

<?
$user_info = "+J+++G+++++w";
$fields = preg_split("/+{1,}/", $user_info);
while ($x < sizeof($fields)) :
   print $fields[$x]. "<br>";
   $x++;
endwhile;
?>

总结在php中str_split()、explode()函数功能是一样的,这里就不介绍了。

把数组转换在字符串

implode()


 代码如下 复制代码

$array = array('a','b','c');

echo implode($array);

//结果  abc

在php中可以采集远程页面的函数有很多,如有file_get_contents(),fopen,file()这些函数都可采集远程服务器数据,但是要算性能curl最可,他支持支持多线程.

 代码如下 复制代码

$curlPost = 'a=1&b=2';//模拟POST数据
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:0.0.0.0', 'CLIENT-IP:0.0.0.0'));  //构造IP
curl_setopt($ch, CURLOPT_REFERER, "http://www.111cn.net/");   //构造来路
curl_setopt($ch,CURLOPT_URL, 'http://www.111cn.net');//需要抓取的页面路径
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);//post值

$file_contents = curl_exec($ch);//抓取的内容放在变量中
curl_close($ch)

还有一种办法就是使用file_get_contents() 远程文件获取函数,用来获取远程页面内容

注意事项

curl()效率挺高的,支持多线程,不过需要开启下curl扩展。下面是curl扩展开启的步骤:

1、将PHP文件夹下的三个文件php_curl.dll,libeay32.dll,ssleay32.dll复制到system32下;

2、将php.ini(c:WINDOWS目录下)中的;extension=php_curl.dll中的分号去掉;
3、重启apache或者IIS。

本文章来给大家介绍debug_backtrace、debug_print_backtrace和匿名函数一些用法分析,有需要了解的同学不防进入参考。

debug_print_backtrace,与之不同的是它会直接打印回溯信息。

debug_print_backtrace() 是一个很低调的函数,很少有人注意过它.
不过当我对着一个对象调用另一个对象再调用其它的对象和文件中的一个函数出错时,它正在一边笑呢.
debug_print_backtrace() 可以打印出一个页面的调用过程 , 从哪儿来到哪儿去一目了然.
不过这是一个PHP5的专有函数,好在pear中已经有了实现,

一、debug_backtrace 它可以回溯跟踪函数的调用信息,可以说是一个调试利器

 代码如下 复制代码

one();
function one() {    two();     }
function two() {    three();  }
function three() {    print_r( debug_backtrace() );   }
/*输出:
Array(
     [0] => Array        (
            [file] => D:apmservwwwhtdocstestdebugindex.php
            [line] => 10
            [function] => three
            [args] => Array                (                )
      ),
      [1] => Array        (
           [file] => D:apmservwwwhtdocstestdebugindex.php
           [line] => 6
           [function] => two
           [args] => Array                (                )
      ),
      [2] => Array        (
           [file] => D:apmservwwwhtdocstestdebugindex.php
           [line] => 3
           [function] => one
           [args] => Array                (                )
      )
)*/

二、debug_print_backtrace 它与之不同的是它会直接打印回溯信息。

三、匿名函数

从PHP 5.3开始新增了匿名函数(Anonymous functions),也叫闭包函数(closures),关键字 use 同时也在匿名函数中。

先看一下匿名函数的示例,作为回调函数的参数

 代码如下 复制代码

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
    }, 'hello-world'
);
// 输出 helloWorld
?>

连接闭包和外界变量的关键字:USE
闭包可以保存所在代码块上下文的一些变量和值。PHP在默认情况下,匿名函数不能调用所在代码块的上下文变量,而需要通过使用use关键字

 代码如下 复制代码


function test(){
    $num = 2;
    $array = array(1,2,3,4,5,6,7,8);
    print_r(array_filter($array, function($param)  use ($num){
    return $param % intval($num) ==0; })
);}
test();

标签:[!--infotagslink--]

您可能感兴趣的文章: