如何获取数组的父键


how do i get the parent key of an array

我正在尝试根据我在数组中搜索的值获取键索引。我有以下数组:

    [0] => Array
                (
                    [n1:ProductWithTermPricingOptions] => Array
                        (
                            [n1:ProductName] => Customer will provide modem
                            [n1:PricingOptions] => Array
                                (
                                    [n1:Priority] => 600
                                    [n1:PricingOptionCode] => LCTL_SA_MDM_NONE_LCTL:NONE:MODEM:IN:CON:SA:na:na:NONE:NONE:-1:-1:NONE:LCTL:NONE:0:na:NONE:A:PO:na:0:NULL:NULL:NULL
                                    [n1:ProductMonthlyCharge] => $0.00
                                    [n1:PromoMonthlyCharge] => $0.00
                                    [n1:ProductActivationCharge] => $0.00
                                    [n1:ProductActivationChargeDescription] => Array
                                        (
                                        )
                                    [n1:ContractLength] => Array
                                        (
                                        )

                                        (
                                        )

                                        (
                                        )
                                    [n1:ProductDisclaimer] => Array
                                        (
                                        )

                                )
                        )

我需要获取值"客户将提供调制解调器"所在的密钥编号,在这种情况下,它应该返回密钥的数字 0。在其他情况下,它将返回不同的位置。我已经尝试了以下内容,但它返回值所在的键而不是 [0]:

public static function searchArrayKeybyValue(array $array, $search) {
    foreach ( new RecursiveIteratorIterator ( new RecursiveArrayIterator ( $array ) ) as $key => $value ) {
        if ($search === $value)
            return $key;
    }
    return "N/A";
}

任何帮助,不胜感激。我的目标是将此选项放在数组的最后一个位置。谢谢。

function array_finder($array, $search, $parent_key = false)
{
   foreach ($array as $local_key => $value) {
      $key = ($parent_key === false) ? $local_key : $parent_key;
      if (is_array($value) and ($subsearch = array_finder($value, $search, $key)) !== false) {
         return $subsearch;
      } elseif ($value == $search) {
         return $key;
      }
   }
   return false;
}
echo array_finder($array, 'Customer will provide modem');

您返回的是内部键,而不是最外层的键。对外部数组使用普通foreach,对内容使用递归迭代器。

foreach ($array as $key => $subarray) {
    foreach (new RecursiveIterator($subarray) as $value) {
        if ($value === $search) {
            return $key;
        }
    }
}

如果将数组转换为 DOMDocument 对象,子元素实际上可以看到它们的父元素是什么,您可以根据需要遍历或修改它。 然后只需将其转换回来即可。 (我知道这些转换说起来容易做起来难,所以如果这个解决方案听起来对你来说是正确的,请告诉我,我将使用一些可以处理这个问题的帮助程序函数来编辑它。