PHP 按键搜索多维数组
PHP searching a multidemisional array by key
我想搜索一个多维数组,return 找到第一个键的值。例如,我正在使用一些地理工具,它 return 是这个数组。我怎样才能递归地遍历这个数组和 return 任何名称为 lat 的键的第一个值?我试过 array_walk 但这似乎只是 return 真或假。我试过 array_filter 但我不认为这是为了什么?但我不知道该数组将有多少个子数组,所以我需要它遍历每个数组集,直到找到我正在寻找的键,return 值并完成。
array(4) {
["bounds"]=>
array(2) {
["northeast"]=>
array(2) {
["lat"]=>
float(37.8468559)
["lng"]=>
float(-121.891768)
}
["southwest"]=>
array(2) {
["lat"]=>
float(37.779857)
["lng"]=>
float(-122.027307)
}
}
["location"]=>
array(2) {
["lat"]=>
float(37.8215929)
["lng"]=>
float(-121.9999606)
}
["location_type"]=>
string(11) "APPROXIMATE"
["viewport"]=>
array(2) {
["northeast"]=>
array(2) {
["lat"]=>
float(37.8468559)
["lng"]=>
float(-121.891768)
}
["southwest"]=>
array(2) {
["lat"]=>
float(37.779857)
["lng"]=>
float(-122.027307)
}
}
}
这里是一个使用array_filter的例子。它有效,只有当我回显该值时,但我想 return 该值以在不同时间使用它。但是当我执行 return 时,它 return 是整个子数组:
function getLat($k,$v)
{
if(is_array($k)){
foreach($k AS $key => $value)
{
if($key == 'lat')
{
echo $value;
}
}}
}
$test = array_filter($response,'getLat',ARRAY_FILTER_USE_BOTH);
这与 37.8215929 相呼应。这正是我想要的,而且想要return它。当我将 echo 更改为 return 时,它 return 是这样的:
array(1) {
["location"]=>
array(2) {
["lat"]=>
float(37.8215929)
["lng"]=>
float(-121.9999606)
}
}
使用 use
关键字和匿名函数 array_walk_recursive
:
$return_value = null;
array_walk_recursive($array, function ($item, $key) use (&$return_value) {
if($key === "lat") {
$return_value = $item;
}
});
return $return_value;
传递引用 (&) 以更改闭包(匿名函数)外的变量(在本例中为 $return_value)。
我想搜索一个多维数组,return 找到第一个键的值。例如,我正在使用一些地理工具,它 return 是这个数组。我怎样才能递归地遍历这个数组和 return 任何名称为 lat 的键的第一个值?我试过 array_walk 但这似乎只是 return 真或假。我试过 array_filter 但我不认为这是为了什么?但我不知道该数组将有多少个子数组,所以我需要它遍历每个数组集,直到找到我正在寻找的键,return 值并完成。
array(4) {
["bounds"]=>
array(2) {
["northeast"]=>
array(2) {
["lat"]=>
float(37.8468559)
["lng"]=>
float(-121.891768)
}
["southwest"]=>
array(2) {
["lat"]=>
float(37.779857)
["lng"]=>
float(-122.027307)
}
}
["location"]=>
array(2) {
["lat"]=>
float(37.8215929)
["lng"]=>
float(-121.9999606)
}
["location_type"]=>
string(11) "APPROXIMATE"
["viewport"]=>
array(2) {
["northeast"]=>
array(2) {
["lat"]=>
float(37.8468559)
["lng"]=>
float(-121.891768)
}
["southwest"]=>
array(2) {
["lat"]=>
float(37.779857)
["lng"]=>
float(-122.027307)
}
}
}
这里是一个使用array_filter的例子。它有效,只有当我回显该值时,但我想 return 该值以在不同时间使用它。但是当我执行 return 时,它 return 是整个子数组:
function getLat($k,$v)
{
if(is_array($k)){
foreach($k AS $key => $value)
{
if($key == 'lat')
{
echo $value;
}
}}
}
$test = array_filter($response,'getLat',ARRAY_FILTER_USE_BOTH);
这与 37.8215929 相呼应。这正是我想要的,而且想要return它。当我将 echo 更改为 return 时,它 return 是这样的:
array(1) {
["location"]=>
array(2) {
["lat"]=>
float(37.8215929)
["lng"]=>
float(-121.9999606)
}
}
使用 use
关键字和匿名函数 array_walk_recursive
:
$return_value = null;
array_walk_recursive($array, function ($item, $key) use (&$return_value) {
if($key === "lat") {
$return_value = $item;
}
});
return $return_value;
传递引用 (&) 以更改闭包(匿名函数)外的变量(在本例中为 $return_value)。