Php 检索数组中给定子项的所有父项

Php 检索数组中给定子项的所有父项,php,Php,我为这件事伤了脑筋,但似乎找不到解决办法。我需要一个函数来检索给定子键的所有父键。例如,如果我有这样一个数组: array( 'apples' => array( 'bananas' => array( 'strawberries' => array( 'fruit' => array() ) ) ) ) 我将调用类似“key\u get\u

我为这件事伤了脑筋,但似乎找不到解决办法。我需要一个函数来检索给定子键的所有父键。例如,如果我有这样一个数组:

array(
    'apples' => array(
        'bananas' => array(
            'strawberries' => array(
                'fruit' => array()
            )
        )
    )
)

我将调用类似“key\u get\u parents($key,$array)”的函数,它将返回一个包含所有父键的数组。在本例中,这将是数组(“苹果”、“香蕉”、“草莓”)。

是!这正是我想要的。非常感谢。请注意,如果您的子密钥是重复的,则这可能不会按您所希望的方式运行:它将只返回遇到的第一个沿袭。但是,如果您愿意,您可以很容易地修改该函数以收集每个沿袭。是的,但在我的用例中,我始终确信子密钥只出现一次。再次感谢!对这正是我想要的。非常感谢。请注意,如果您的子密钥是重复的,则这可能不会按您所希望的方式运行:它将只返回遇到的第一个沿袭。但是,如果您愿意,您可以很容易地修改该函数以收集每个沿袭。是的,但在我的用例中,我始终确信子密钥只出现一次。再次感谢!
$array = array(
    'apples' => array(
            'bananas' => array(
                    'strawberries' => array(
                            'fruit' => array()
                    )
            )
    )
 );

function key_get_parents($subject, $array)
{
  foreach ($array as $key => $value)
  {
    if (is_array($value))
    {
      if (in_array($subject, array_keys($value)))
        return array($key);
      else
      {
        $chain = key_get_parents($subject, $value);
        if (!is_null($chain))
          return array_merge(array($key), $chain);
      }
    }
  }

  return null;
}

// Prints "Array ( [0] => apples [1] => bananas )"
print_r(key_get_parents('strawberries', $array));