Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP按键搜索多维数组_Php_Multidimensional Array_Array Filter_Array Walk - Fatal编程技术网

PHP按键搜索多维数组

PHP按键搜索多维数组,php,multidimensional-array,array-filter,array-walk,Php,Multidimensional Array,Array Filter,Array Walk,我想搜索多维数组并返回找到的第一个键的值。例如,我正在使用一些地理工具,它返回这个数组。如何递归地遍历这个数组并返回任何名为lat的键的第一个值?我尝试了array_walk,但这似乎只是返回真或假。我尝试了数组过滤器,但我不认为这就是它的用途?但是我不知道这个数组将有多少子数组,所以我需要它遍历每个数组集,直到它找到我要查找的键,返回值并完成 array(4) { ["bounds"]=> array(2) { ["northeast"]=> arr

我想搜索多维数组并返回找到的第一个键的值。例如,我正在使用一些地理工具,它返回这个数组。如何递归地遍历这个数组并返回任何名为lat的键的第一个值?我尝试了array_walk,但这似乎只是返回真或假。我尝试了数组过滤器,但我不认为这就是它的用途?但是我不知道这个数组将有多少子数组,所以我需要它遍历每个数组集,直到它找到我要查找的键,返回值并完成

    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)
    }
  }
}
下面是一个使用数组过滤器的示例。只有当我回显该值时,它才会工作,但我希望返回该值以便在不同的时间使用它。但当我返回时,它返回整个子数组:

        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。这正是我想要的,但我想退货。当我将echo更改为return时,它将返回以下内容:

array(1) {
  ["location"]=>
  array(2) {
    ["lat"]=>
    float(37.8215929)
    ["lng"]=>
    float(-121.9999606)
  }
}

使用
Use
关键字和带有
array\u walk\u recursive
的匿名函数:

$return_value = null;
array_walk_recursive($array, function ($item, $key) use (&$return_value) {
  if($key === "lat") {
    $return_value = $item;
  }
});
return $return_value;

传递引用(&)以更改闭包(匿名函数)外部的变量(在本例中为$return\u value)。

数组过滤器的正确行为是返回数组。您是否厌倦了使用
返回$value而不是
echo$value在你的函数中?@EnricoDias是的,我用我尝试使用的数组过滤器函数的例子更新了我的问题。我将return替换为echo,它返回整个子数组,而不是该键的特定值。