PHP多维数组每个元素值一一处理不用遍历,获得处理后的数组方式,处理自行编写递归和引用方法外,array_walk_recursive函数轻松搞定。
PHP中针对多维数组里边的元素需要一 一处理,然后获得处理后的数组,一般会用遍历方式,如果数组层次太深减少代码量和重用性会用递归或者引用的方式,PHP多维数组元素值处理array_walk_recursive轻松搞定,不用遍历(此函数原理也是遍历递归)。
先定义一个数组:
$item1 = array('php','html','javascript');
$class = array(array('code'=>'1','name'=>'软件开发','item'=>$item1),);
//打印数组:
print_r($class);
打印的数组结构:
Array
(
[0] => Array
(
[code] => 1
[name] => 软件开发
[item] => Array
(
[0] => php
[1] => html
[2] => javascript
)
)
)
现在要把数组里边的每个元素值拼接上个*号(这里做个示例)。
方法一、用递归自写个方法:
function varArr($var){
$param = array();
if(is_array($var)){
foreach($var as $k=>$v){
$param[$k] = varArr($v);
}
}else{
return $var.'*';
}
return $param;
}
// 调用varArr方法
$result = varArr($class); // 调用自定义的方法
print_r($result); // 打印结果
打印出的结果:
Array
(
[0] => Array
(
[code] => 1*
[name] => 软件开发*
[item] => Array
(
[0] => php*
[1] => html*
[2] => javascript*
)
)
)
方法二、PHP自带的函数array_walk_recursive();
//自定义方法:
function unitStr(&$v,$k,$str){
$v .=$str;
}
// 把$class数组里每个元素应用到自定义方法unitStr
array_walk_recursive($class,'unitStr','*');
// 打印结果
print_r($class);
打印结果展示:
Array
(
[0] => Array
(
[code] => 1*
[name] => 软件开发*
[item] => Array
(
[0] => php*
[1] => html*
[2] => javascript*
)
)
)
函数使用理解:
语法:array_walk_recursive(array, callback,params);
参数:
array:数组
callback:自定义方法
params:传参,定义作为第三个参数,用数组方式可以传多个参数,如:array('*','+')。
另外还一个函数array_walk(),用法和 array_walk_recursive() 一样,区别是:array_walk() 适用一维数组,不可以递归遍历,array_walk_recursive() 多维数组,可以递归遍历。