【问题标题】:I have a question about php search associative array我有一个关于 php 搜索关联数组的问题
【发布时间】:2019-11-11 22:20:16
【问题描述】:

我有这个。关联数组

$array = [
    'school' => [
        'college' => [
            'nursing' => ['n1a', 'n2a', 'n3a', 'n4a'],
            'hrm' => ['h1a', 'h2a', 'h3a', 'h4a'],
            'tourism' => ['t1a', 't2a', 't3a', 't4a'],
            'it' => ['i1a', 'i2a', 'i3a', 'i4a'],
        ],
        'senior' => [],
    ],
    'business' => [
        'office' => [
            'dep1' => ['team1', 'team2'],
            'dep2' => ['team1', 'team2'],
            'dep3' => ['team1', 'team2'],
            'dep4' => ['team1', 'team2'],
        ],
    ],
]

我有这段代码,但这只是搜索第一级数组。

  function searchItemsByKey($array, $key) {
       $results = array();

          if (is_array($array))
          {

            if (isset($array[$key]) && key($array)==$key){
                $results[] = $array[$key];
            }

            foreach ($array as $sub_array){
                $results = array_merge($results, $this->searchItemsByKey($sub_array, $key));
            }
          }

         return  $results;
    }

我想要的只是搜索此数组中的所有键,这将导致所有与键关联的数组,例如:

searchItemsByKey($array, 'hrm');

这将返回:

['h1a', 'h2a', 'h3a', 'h4a']

谢谢。

【问题讨论】:

  • 为什么key($array)==$key在if语句中?如果您删除它,我认为它会起作用。可以看这里:3v4l.org/27jHf
  • 尝试一个递归函数,它会深入你的数组,直到找到你想要的键
  • 哦,这很快,谢谢队友@dWinder
  • 会试试的,谢谢@MickaëlLeger
  • 这里有一个很好的答案:stackoverflow.com/a/3975706/661872 - 耻辱不被接受

标签: php arrays


【解决方案1】:

你可以使用array_walk_recursive,

$result = [];
$search = "hrm";
function searchItemsByKey($array, $key)
{
    $retArr = [];
    if (is_array($array)) {
        if (!empty($array[$key])) {
            return $array[$key];
        }
        foreach ($array as $val) {
            $retArr = array_merge($retArr, searchItemsByKey($val, $key));
        }
    }
    return $retArr;
}
$temp = searchItemsByKey($array, 'hrm');

Demo.

【讨论】:

  • 请注意,这只需要密钥的最后一次重复- OP 想要所有这些(就像他一样 result[] = ...array_merge
  • 是的,我正在纠正答案,我认为它会给出每个键,但它会粘在叶节点上。
猜你喜欢
  • 2021-12-31
  • 2014-08-12
  • 2019-02-21
  • 1970-01-01
  • 2020-12-26
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多