【问题标题】:PHP searching a multidemisional array by keyPHP按键搜索多维数组
【发布时间】:2019-01-19 23:54:39
【问题描述】:

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

    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的例子。它只有在我回显该值时才有效,但我想返回该值以在不同的时间使用它。但是当我返回时,它会返回整个子数组:

        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 更改为返回时,它会返回:

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

【问题讨论】:

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

标签: php multidimensional-array array-filter array-walk


【解决方案1】:

使用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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2017-11-16
    • 2020-01-15
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多