php数组array,知道键名如何提取键值
如果是知道键值,需要查找键名,直接使用array_search()即可.现在反过来,如何操作?
(1)array_walk_recursive()加自定义函数查找
$arr=array(
'name'=>'zhangsan',
'age' =>'63',
'money'=>array(
'name'=>'lisi'
)
);
function my_walk($value,$key){//固定格式,$value表示当前键值,$key表示当前键名
static $name;
if($key=='name'){
$name[]=$value;//压入数组
$GLOBALS['name']=$name;
}
}
array_walk_recursive($arr,'my_walk');
var_dump($GLOBALS['name']) ;
/*
结果:
array(2) {
[0]=>
string(8) "zhangsan"
[1]=>
string(4) "lisi"
}
*/
(2)遍历数组进行递归查找
$arr=array(
'name'=>'zhangsan',
'age' =>'63',
'money'=>array(
'name'=>'lisi'
)
);
function getArray($array, $index) {
if (!is_array($array)) return null;
if (isset($array[$index])) return $array[$index];//递归出口
foreach ($array as $item) {
$return = getArray($item, $index);
if (!is_null($return)) {
return $return;
}
}
return null;
}
echo getArray($arr,'name');//打印出结果:zhangsan
上面的getArray()函数只是找到一个键名为'name'的值就返回了,但是如果需要提出相同的多个键名的值,可以这样
$arr=array(
'name'=>'zhangsan',
'age' =>'63',
'money'=>array(
'name'=>'lisi'
)
);
function getArray($array, $index) {
static $return;
if (!is_array($array)) return null;
if (isset($array[$index])) $return[]=$array[$index];//接收
foreach ($array as $item) {
getArray($item, $index);
}
return $return;
}
var_dump(getArray($arr,'name')) ;
/*
结果:
array(2) {
[0]=>
string(8) "zhangsan"
[1]=>
string(4) "lisi"
}
*/